{"version":3,"file":"tabulator.min.js","sources":["../../src/js/core/CoreFeature.js","../../src/js/core/column/ColumnComponent.js","../../src/js/core/column/defaults/options.js","../../src/js/core/cell/CellComponent.js","../../src/js/core/cell/Cell.js","../../src/js/core/column/Column.js","../../src/js/core/tools/Helpers.js","../../src/js/core/tools/OptionsList.js","../../src/js/core/rendering/Renderer.js","../../src/js/core/rendering/renderers/BasicHorizontal.js","../../src/js/core/rendering/renderers/VirtualDomHorizontal.js","../../src/js/core/ColumnManager.js","../../src/js/core/row/RowComponent.js","../../src/js/core/row/Row.js","../../src/js/core/rendering/renderers/BasicVertical.js","../../src/js/core/rendering/renderers/VirtualDomVertical.js","../../src/js/core/RowManager.js","../../src/js/core/FooterManager.js","../../src/js/core/tools/InteractionMonitor.js","../../src/js/core/tools/ComponentFunctionBinder.js","../../src/js/core/tools/DataLoader.js","../../src/js/core/tools/ExternalEventBus.js","../../src/js/core/tools/InternalEventBus.js","../../src/js/core/tools/TableRegistry.js","../../src/js/core/Module.js","../../src/js/modules/Layout/defaults/modes/fitDataGeneral.js","../../src/js/modules/Layout/defaults/modes.js","../../src/js/modules/Layout/defaults/modes/fitData.js","../../src/js/modules/Layout/defaults/modes/fitDataStretch.js","../../src/js/modules/Layout/defaults/modes/fitColumns.js","../../src/js/modules/Layout/Layout.js","../../src/js/modules/Localize/Localize.js","../../src/js/modules/Localize/defaults/langs.js","../../src/js/modules/Comms/Comms.js","../../src/js/core/tools/ModuleBinder.js","../../src/js/core/Tabulator.js","../../src/js/core/defaults/options.js","../../src/js/modules/Accessor/Accessor.js","../../src/js/modules/Accessor/defaults/accessors.js","../../src/js/modules/Ajax/defaults/urlGenerator.js","../../src/js/modules/Ajax/defaults/contentTypeFormatters.js","../../src/js/modules/Ajax/Ajax.js","../../src/js/modules/Ajax/defaults/config.js","../../src/js/modules/Ajax/defaults/loaderPromise.js","../../src/js/modules/Clipboard/Clipboard.js","../../src/js/modules/Clipboard/defaults/pasteActions.js","../../src/js/modules/Clipboard/defaults/pasteParsers.js","../../src/js/modules/ColumnCalcs/CalcComponent.js","../../src/js/modules/ColumnCalcs/defaults/calculations.js","../../src/js/modules/ColumnCalcs/ColumnCalcs.js","../../src/js/modules/DataTree/DataTree.js","../../src/js/modules/Download/defaults/downloaders.js","../../src/js/modules/Download/defaults/downloaders/csv.js","../../src/js/modules/Download/defaults/downloaders/json.js","../../src/js/modules/Download/defaults/downloaders/jsonLines.js","../../src/js/modules/Download/defaults/downloaders/pdf.js","../../src/js/modules/Download/defaults/downloaders/xlsx.js","../../src/js/modules/Download/defaults/downloaders/html.js","../../src/js/modules/Download/Download.js","../../src/js/modules/Edit/inputMask.js","../../src/js/modules/Edit/defaults/editors.js","../../src/js/modules/Edit/defaults/editors/input.js","../../src/js/modules/Edit/defaults/editors/textarea.js","../../src/js/modules/Edit/defaults/editors/number.js","../../src/js/modules/Edit/defaults/editors/range.js","../../src/js/modules/Edit/defaults/editors/select.js","../../src/js/modules/Edit/defaults/editors/autocomplete.js","../../src/js/modules/Edit/defaults/editors/star.js","../../src/js/modules/Edit/defaults/editors/progress.js","../../src/js/modules/Edit/defaults/editors/tickCross.js","../../src/js/modules/Edit/Edit.js","../../src/js/modules/Export/ExportRow.js","../../src/js/modules/Export/ExportColumn.js","../../src/js/modules/Export/Export.js","../../src/js/modules/Filter/defaults/filters.js","../../src/js/modules/Filter/Filter.js","../../src/js/modules/Format/defaults/formatters.js","../../src/js/modules/Format/defaults/formatters/plaintext.js","../../src/js/modules/Format/defaults/formatters/html.js","../../src/js/modules/Format/defaults/formatters/textarea.js","../../src/js/modules/Format/defaults/formatters/money.js","../../src/js/modules/Format/defaults/formatters/link.js","../../src/js/modules/Format/defaults/formatters/image.js","../../src/js/modules/Format/defaults/formatters/tickCross.js","../../src/js/modules/Format/defaults/formatters/datetime.js","../../src/js/modules/Format/defaults/formatters/datetimediff.js","../../src/js/modules/Format/defaults/formatters/lookup.js","../../src/js/modules/Format/defaults/formatters/star.js","../../src/js/modules/Format/defaults/formatters/traffic.js","../../src/js/modules/Format/defaults/formatters/progress.js","../../src/js/modules/Format/defaults/formatters/color.js","../../src/js/modules/Format/defaults/formatters/buttonTick.js","../../src/js/modules/Format/defaults/formatters/buttonCross.js","../../src/js/modules/Format/defaults/formatters/rownum.js","../../src/js/modules/Format/defaults/formatters/handle.js","../../src/js/modules/Format/defaults/formatters/responsiveCollapse.js","../../src/js/modules/Format/defaults/formatters/rowSelection.js","../../src/js/modules/Format/Format.js","../../src/js/modules/FrozenColumns/FrozenColumns.js","../../src/js/modules/FrozenRows/FrozenRows.js","../../src/js/modules/GroupRows/GroupComponent.js","../../src/js/modules/GroupRows/Group.js","../../src/js/modules/GroupRows/GroupRows.js","../../src/js/modules/History/History.js","../../src/js/modules/History/defaults/undoers.js","../../src/js/modules/History/defaults/redoers.js","../../src/js/modules/HtmlTableImport/HtmlTableImport.js","../../src/js/modules/Import/defaults/importers.js","../../src/js/modules/Import/defaults/importers/csv.js","../../src/js/modules/Import/defaults/importers/json.js","../../src/js/modules/Import/Import.js","../../src/js/modules/Interaction/Interaction.js","../../src/js/modules/Keybindings/Keybindings.js","../../src/js/modules/Keybindings/defaults/bindings.js","../../src/js/modules/Keybindings/defaults/actions.js","../../src/js/modules/Menu/Menu.js","../../src/js/modules/MoveColumns/MoveColumns.js","../../src/js/modules/MoveRows/MoveRows.js","../../src/js/modules/Mutator/Mutator.js","../../src/js/modules/Mutator/defaults/mutators.js","../../src/js/modules/Page/defaults/pageCounters.js","../../src/js/modules/Page/defaults/pageCounters/rows.js","../../src/js/modules/Page/defaults/pageCounters/pages.js","../../src/js/modules/Page/Page.js","../../src/js/modules/Persistence/defaults/readers.js","../../src/js/modules/Persistence/defaults/writers.js","../../src/js/modules/Persistence/Persistence.js","../../src/js/modules/Print/Print.js","../../src/js/modules/ReactiveData/ReactiveData.js","../../src/js/modules/ResizeColumns/ResizeColumns.js","../../src/js/modules/ResizeRows/ResizeRows.js","../../src/js/modules/ResizeTable/ResizeTable.js","../../src/js/modules/ResponsiveLayout/ResponsiveLayout.js","../../src/js/modules/SelectRow/SelectRow.js","../../src/js/modules/Sort/defaults/sorters/datetime.js","../../src/js/modules/Sort/defaults/sorters.js","../../src/js/modules/Sort/defaults/sorters/number.js","../../src/js/modules/Sort/defaults/sorters/string.js","../../src/js/modules/Sort/defaults/sorters/date.js","../../src/js/modules/Sort/defaults/sorters/time.js","../../src/js/modules/Sort/defaults/sorters/boolean.js","../../src/js/modules/Sort/defaults/sorters/array.js","../../src/js/modules/Sort/defaults/sorters/exists.js","../../src/js/modules/Sort/defaults/sorters/alphanum.js","../../src/js/modules/Sort/Sort.js","../../src/js/modules/Validate/defaults/validators.js","../../src/js/modules/Validate/Validate.js","../../src/js/core/TabulatorFull.js"],"sourcesContent":["export default class CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// DataLoad /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\treloadData(data, silent){\r\n\t\treturn this.table.dataLoader.load(data, undefined, undefined, undefined, silent);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t///////////// Localization ///////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlangText(){\r\n\t\treturn this.table.modules.localize.getText(...arguments);\r\n\t}\r\n\r\n\tlangBind(){\r\n\t\treturn this.table.modules.localize.bind(...arguments);\r\n\t}\r\n\r\n\tlangLocale(){\r\n\t\treturn this.table.modules.localize.getLocale(...arguments);\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t////////// Inter Table Comms /////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tcommsConnections(){\r\n\t\treturn this.table.modules.comms.getConnections(...arguments);\r\n\t}\r\n\r\n\tcommsSend(){\r\n\t\treturn this.table.modules.comms.send(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Layout /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tlayoutMode(){\r\n\t\treturn this.table.modules.layout.getMode();\r\n\t}\r\n\r\n\tlayoutRefresh(){\r\n\t\treturn this.table.modules.layout.layout();\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t/////////////// Event Bus ////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tsubscribe(){\r\n\t\treturn this.table.eventBus.subscribe(...arguments);\r\n\t}\r\n\r\n\tunsubscribe(){\r\n\t\treturn this.table.eventBus.unsubscribe(...arguments);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.table.eventBus.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChange(){\r\n\t\treturn this.table.eventBus.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\tdispatch(){\r\n\t\treturn this.table.eventBus.dispatch(...arguments);\r\n\t}\r\n\r\n\tchain(){\r\n\t\treturn this.table.eventBus.chain(...arguments);\r\n\t}\r\n\r\n\tconfirm(){\r\n\t\treturn this.table.eventBus.confirm(...arguments);\r\n\t}\r\n\r\n\tdispatchExternal(){\r\n\t\treturn this.table.externalEvents.dispatch(...arguments);\r\n\t}\r\n\r\n\tsubscribedExternal(key){\r\n\t\treturn this.table.externalEvents.subscribed(key);\r\n\t}\r\n\r\n\tsubscriptionChangeExternal(){\r\n\t\treturn this.table.externalEvents.subscriptionChange(...arguments);\r\n\t}\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Options /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\toptions(key){\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\tsetOption(key, value){\r\n\t\tif(typeof value !== \"undefined\"){\r\n\t\t\tthis.table.options[key] = value;\r\n\t\t}\r\n\r\n\t\treturn this.table.options[key];\r\n\t}\r\n\r\n\r\n\t//////////////////////////////////////////\r\n\t//////////////// Modules /////////////////\r\n\t//////////////////////////////////////////\r\n\r\n\tmodule(key){\r\n\t\treturn this.table.module(key);\r\n\t}\r\n}","//public column object\r\nexport default class ColumnComponent {\r\n\tconstructor (column){\r\n\t\tthis._column = column;\r\n\t\tthis.type = \"ColumnComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._column.table.componentFunctionBinder.handle(\"column\", target._column, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._column.getElement();\r\n\t}\r\n\r\n\tgetDefinition(){\r\n\t\treturn this._column.getDefinition();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._column.getField();\r\n\t}\r\n\r\n\tgetTitleDownload() {\r\n\t\treturn this._column.getTitleDownload();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._column.cells.forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tisVisible(){\r\n\t\treturn this._column.visible;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.show();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.show();\r\n\t\t}\r\n\t}\r\n\r\n\thide(){\r\n\t\tif(this._column.isGroup){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis._column.hide();\r\n\t\t}\r\n\t}\r\n\r\n\ttoggle(){\r\n\t\tif(this._column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}else{\r\n\t\t\tthis.show();\r\n\t\t}\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._column.delete();\r\n\t}\r\n\r\n\tgetSubColumns(){\r\n\t\tvar output = [];\r\n\r\n\t\tif(this._column.columns.length){\r\n\t\t\tthis._column.columns.forEach(function(column){\r\n\t\t\t\toutput.push(column.getComponent());\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetParentColumn(){\r\n\t\treturn this._column.parent instanceof Column ? this._column.parent.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._column;\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._column.table.columnManager.scrollToColumn(this._column);\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._column.table;\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tvar toColumn = this._column.table.columnManager.findColumn(to);\r\n\r\n\t\tif(toColumn){\r\n\t\t\tthis._column.table.columnManager.moveColumn(this._column, toColumn, after)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t}\r\n\t}\r\n\r\n\tgetNextColumn(){\r\n\t\tvar nextCol = this._column.nextColumn();\r\n\r\n\t\treturn nextCol ? nextCol.getComponent() : false;\r\n\t}\r\n\r\n\tgetPrevColumn(){\r\n\t\tvar prevCol = this._column.prevColumn();\r\n\r\n\t\treturn prevCol ? prevCol.getComponent() : false;\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\treturn this._column.updateDefinition(updates);\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this._column.getWidth();\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tvar result;\r\n\r\n\t\tif(width === true){\r\n\t\t\tresult = this._column.reinitializeWidth(true);\r\n\t\t}else{\r\n\t\t\tresult = this._column.setWidth(width);\r\n\t\t}\r\n\r\n\t\tthis._column.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\treturn result;\r\n\t}\r\n}","export default {\r\n\t\"title\": undefined,\r\n\t\"field\": undefined,\r\n\t\"columns\": undefined,\r\n\t\"visible\": undefined,\r\n\t\"hozAlign\": undefined,\r\n\t\"vertAlign\": undefined,\r\n\t\"width\": undefined,\r\n\t\"minWidth\": 40,\r\n\t\"maxWidth\": undefined,\r\n\t\"maxInitialWidth\": undefined,\r\n\t\"tooltip\": undefined,\r\n\t\"cssClass\": undefined,\r\n\t\"variableHeight\": undefined,\r\n\t\"headerTooltip\": undefined,\r\n\t\"headerVertical\": undefined,\r\n\t\"headerHozAlign\": undefined,\r\n\t\"editableTitle\": undefined,\r\n}","//public cell object\r\nexport default class CellComponent {\r\n\r\n\tconstructor (cell){\r\n\t\tthis._cell = cell;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._cell.table.componentFunctionBinder.handle(\"cell\", target._cell, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this._cell.getValue();\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this._cell.getOldValue();\r\n\t}\r\n\r\n\tgetInitialValue(){\r\n\t\treturn this._cell.initialValue;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._cell.getElement();\r\n\t}\r\n\r\n\tgetRow(){\r\n\t\treturn this._cell.row.getComponent();\r\n\t}\r\n\r\n\tgetData(){\r\n\t\treturn this._cell.row.getData();\r\n\t}\r\n\r\n\tgetField(){\r\n\t\treturn this._cell.column.getField();\r\n\t}\r\n\r\n\tgetColumn(){\r\n\t\treturn this._cell.column.getComponent();\r\n\t}\r\n\r\n\tsetValue(value, mutate){\r\n\t\tif(typeof mutate == \"undefined\"){\r\n\t\t\tmutate = true;\r\n\t\t}\r\n\r\n\t\tthis._cell.setValue(value, mutate);\r\n\t}\r\n\r\n\trestoreOldValue(){\r\n\t\tthis._cell.setValueActual(this._cell.getOldValue());\r\n\t}\r\n\r\n\trestoreInitialValue(){\r\n\t\tthis._cell.setValueActual(this._cell.initialValue);\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\tthis._cell.checkHeight();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._cell.table;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._cell;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport CellComponent from './CellComponent.js';\r\n\r\nexport default class Cell extends CoreFeature{\r\n\tconstructor(column, row){\r\n\t\tsuper(column.table);\r\n\r\n\t\tthis.table = column.table;\r\n\t\tthis.column = column;\r\n\t\tthis.row = row;\r\n\t\tthis.element = null;\r\n\t\tthis.value = null;\r\n\t\tthis.initialValue;\r\n\t\tthis.oldValue = null;\r\n\t\tthis.modules = {};\r\n\r\n\t\tthis.height = null;\r\n\t\tthis.width = null;\r\n\t\tthis.minWidth = null;\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.loaded = false; //track if the cell has been added to the DOM yet\r\n\r\n\t\tthis.build();\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\t//generate element\r\n\tbuild(){\r\n\t\tthis.generateElement();\r\n\r\n\t\tthis.setWidth();\r\n\r\n\t\tthis._configureCell();\r\n\r\n\t\tthis.setValueActual(this.column.getFieldValue(this.row.data));\r\n\r\n\t\tthis.initialValue = this.value;\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.element = document.createElement('div');\r\n\t\tthis.element.className = \"tabulator-cell\";\r\n\t\tthis.element.setAttribute(\"role\", \"gridcell\");\r\n\t\tthis.element = this.element;\r\n\t}\r\n\r\n\t_configureCell(){\r\n\t\tvar element = this.element,\r\n\t\tfield = this.column.getField(),\r\n\t\tvertAligns = {\r\n\t\t\ttop:\"flex-start\",\r\n\t\t\tbottom:\"flex-end\",\r\n\t\t\tmiddle:\"center\",\r\n\t\t},\r\n\t\thozAligns = {\r\n\t\t\tleft:\"flex-start\",\r\n\t\t\tright:\"flex-end\",\r\n\t\t\tcenter:\"center\",\r\n\t\t};\r\n\r\n\t\t//set text alignment\r\n\t\telement.style.textAlign = this.column.hozAlign;\r\n\r\n\t\tif(this.column.vertAlign){\r\n\t\t\telement.style.display = \"inline-flex\";\r\n\r\n\t\t\telement.style.alignItems = vertAligns[this.column.vertAlign] || \"\";\r\n\r\n\t\t\tif(this.column.hozAlign){\r\n\t\t\t\telement.style.justifyContent = hozAligns[this.column.hozAlign] || \"\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\t\t\telement.setAttribute(\"tabulator-field\", field);\r\n\t\t}\r\n\r\n\t\t//add class to cell if needed\r\n\t\tif(this.column.definition.cssClass){\r\n\t\t\tvar classNames = this.column.definition.cssClass.split(\" \")\r\n\t\t\tclassNames.forEach((className) => {\r\n\t\t\t\telement.classList.add(className)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t//update tooltip on mouse enter\r\n\t\tif (this.table.options.tooltipGenerationMode === \"hover\"){\r\n\t\t\telement.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\t\tthis._generateTooltip();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"cell-init\", this);\r\n\r\n\t\t//hide cell if not visible\r\n\t\tif(!this.column.visible){\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//generate cell contents\r\n\t_generateContents(){\r\n\t\tvar val;\r\n\r\n\t\tval = this.chain(\"cell-format\", this, null, () => {\r\n\t\t\treturn this.element.innerHTML = this.value;\r\n\t\t});\r\n\r\n\t\tswitch(typeof val){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(val instanceof Node){\r\n\r\n\t\t\t\t//clear previous cell contents\r\n\t\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\t\tthis.element.appendChild(val);\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.innerHTML = \"\";\r\n\r\n\t\t\t\tif(val != null){\r\n\t\t\t\t\tconsole.warn(\"Format Error - Formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", val);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tthis.element.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tthis.element.innerHTML = val;\r\n\t\t}\r\n\t}\r\n\r\n\tcellRendered(){\r\n\t\tthis.dispatch(\"cell-rendered\", this);\r\n\t}\r\n\r\n\t//generate tooltip text\r\n\t_generateTooltip(){\r\n\t\tvar tooltip = this.column.tooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\ttooltip = this.value;\r\n\t\t\t}else if(typeof(tooltip) == \"function\"){\r\n\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof tooltip === \"undefined\"){\r\n\t\t\t\ttooltip = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////////// Getters ////////////////////\r\n\tgetElement(containerOnly){\r\n\t\tif(!this.loaded){\r\n\t\t\tthis.loaded = true;\r\n\t\t\tif(!containerOnly){\r\n\t\t\t\tthis.layoutElement();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tgetValue(){\r\n\t\treturn this.value;\r\n\t}\r\n\r\n\tgetOldValue(){\r\n\t\treturn this.oldValue;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tsetValue(value, mutate){\r\n\t\tvar changed = this.setValueProcessData(value, mutate);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-updated\", this);\r\n\r\n\t\t\tthis.cellRendered();\r\n\r\n\t\t\tif(this.column.definition.cellEdited){\r\n\t\t\t\tthis.column.definition.cellEdited.call(this.table, this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"cellEdited\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetValueProcessData(value, mutate){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.value !== value){\r\n\r\n\t\t\tchanged = true;\r\n\r\n\t\t\tif(mutate){\r\n\t\t\t\tvalue = this.chain(\"cell-value-changing\", [this, value], null, value);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.setValueActual(value);\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.dispatch(\"cell-value-changed\", this);\r\n\t\t}\r\n\r\n\t\treturn changed;\r\n\t}\r\n\r\n\tsetValueActual(value){\r\n\t\tthis.oldValue = this.value;\r\n\r\n\t\tthis.value = value;\r\n\r\n\t\tthis.dispatch(\"cell-value-save-before\", this);\r\n\r\n\t\tthis.column.setFieldValue(this.row.data, value);\r\n\r\n\t\tthis.dispatch(\"cell-value-save-after\", this);\r\n\r\n\t\tif(this.loaded){\r\n\t\t\tthis.layoutElement();\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutElement(){\r\n\t\tthis._generateContents();\r\n\t\tthis._generateTooltip();\r\n\r\n\t\tthis.dispatch(\"cell-layout\", this);\r\n\t}\r\n\r\n\tsetWidth(){\r\n\t\tthis.width = this.column.width;\r\n\t\tthis.element.style.width = this.column.widthStyled;\r\n\t}\r\n\r\n\tclearWidth(){\r\n\t\tthis.width = \"\";\r\n\t\tthis.element.style.width = \"\";\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\treturn this.width || this.element.offsetWidth;\r\n\t}\r\n\r\n\tsetMinWidth(){\r\n\t\tthis.minWidth = this.column.minWidth;\r\n\t\tthis.element.style.minWidth = this.column.minWidthStyled;\r\n\t}\r\n\r\n\tsetMaxWidth(){\r\n\t\tthis.maxWidth = this.column.maxWidth;\r\n\t\tthis.element.style.maxWidth = this.column.maxWidthStyled;\r\n\t}\r\n\r\n\tcheckHeight(){\r\n\t\t// var height = this.element.css(\"height\");\r\n\t\tthis.row.reinitializeHeight();\r\n\t}\r\n\r\n\tclearHeight(){\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.height = null;\r\n\t}\r\n\r\n\tsetHeight(){\r\n\t\tthis.height = this.row.height;\r\n\t\tthis.element.style.height = this.row.heightStyled;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn this.height || this.element.offsetHeight;\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.element.style.display = this.column.vertAlign ? \"inline-flex\" : \"\";\r\n\t}\r\n\r\n\thide(){\r\n\t\tthis.element.style.display = \"none\";\r\n\t}\r\n\r\n\tdelete(){\r\n\t\tthis.dispatch(\"cell-delete\", this);\r\n\r\n\t\tif(!this.table.rowManager.redrawBlock && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.column.deleteCell(this);\r\n\t\tthis.row.deleteCell(this);\r\n\t\tthis.calcs = {};\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this.row.getCellIndex(this);\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new CellComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport ColumnComponent from './ColumnComponent.js';\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport Cell from '../cell/Cell.js';\r\n\r\nclass Column extends CoreFeature{\r\n\r\n\tconstructor(def, parent){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.definition = def; //column definition\r\n\t\tthis.parent = parent; //hold parent object\r\n\t\tthis.type = \"column\"; //type of element\r\n\t\tthis.columns = []; //child columns\r\n\t\tthis.cells = []; //cells bound to this column\r\n\t\tthis.element = this.createElement(); //column header element\r\n\t\tthis.contentElement = false;\r\n\t\tthis.titleHolderElement = false;\r\n\t\tthis.titleElement = false;\r\n\t\tthis.groupElement = this.createGroupElement(); //column group holder element\r\n\t\tthis.isGroup = false;\r\n\t\tthis.tooltip = false; //hold column tooltip\r\n\t\tthis.hozAlign = \"\"; //horizontal text alignment\r\n\t\tthis.vertAlign = \"\"; //vert text alignment\r\n\r\n\t\t//multi dimensional filed handling\r\n\t\tthis.field =\"\";\r\n\t\tthis.fieldStructure = \"\";\r\n\t\tthis.getFieldValue = \"\";\r\n\t\tthis.setFieldValue = \"\";\r\n\r\n\t\tthis.titleDownload = null;\r\n\t\tthis.titleFormatterRendered = false;\r\n\r\n\t\tthis.mapDefinitions();\r\n\r\n\t\tthis.setField(this.definition.field);\r\n\r\n\t\tthis.modules = {}; //hold module variables;\r\n\r\n\t\tthis.width = null; //column width\r\n\t\tthis.widthStyled = \"\"; //column width prestyled to improve render efficiency\r\n\t\tthis.maxWidth = null; //column maximum width\r\n\t\tthis.maxWidthStyled = \"\"; //column maximum prestyled to improve render efficiency\r\n\t\tthis.maxInitialWidth = null;\r\n\t\tthis.minWidth = null; //column minimum width\r\n\t\tthis.minWidthStyled = \"\"; //column minimum prestyled to improve render efficiency\r\n\t\tthis.widthFixed = false; //user has specified a width for this column\r\n\r\n\t\tthis.visible = true; //default visible state\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\t//initialize column\r\n\t\tif(this.definition.columns){\r\n\r\n\t\t\tthis.isGroup = true;\r\n\r\n\t\t\tthis.definition.columns.forEach((def, i) => {\r\n\t\t\t\tvar newCol = new Column(def, this);\r\n\t\t\t\tthis.attachColumn(newCol);\r\n\t\t\t});\r\n\r\n\t\t\tthis.checkColumnVisibility();\r\n\t\t}else{\r\n\t\t\tparent.registerColumnField(this);\r\n\t\t}\r\n\r\n\t\tthis._initialize();\r\n\r\n\t\tthis.bindModuleColumns();\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.setAttribute(\"role\", \"columnheader\");\r\n\t\tel.setAttribute(\"aria-sort\", \"none\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateGroupElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-col-group-cols\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tmapDefinitions(){\r\n\t\tvar defaults = this.table.options.columnDefaults;\r\n\r\n\t\t//map columnDefaults onto column definitions\r\n\t\tif(defaults){\r\n\t\t\tfor(let key in defaults){\r\n\t\t\t\tif(typeof this.definition[key] === \"undefined\"){\r\n\t\t\t\t\tthis.definition[key] = defaults[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.definition = this.table.columnManager.optionsList.generate(Column.defaultOptionList, this.definition)\r\n\t}\r\n\r\n\tcheckDefinition(){\r\n\t\tObject.keys(this.definition).forEach((key) => {\r\n\t\t\tif(Column.defaultOptionList.indexOf(key) === -1){\r\n\t\t\t\tconsole.warn(\"Invalid column definition option in '\" + (this.field || this.definition.title) + \"' column:\", key)\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tsetField(field){\r\n\t\tthis.field = field;\r\n\t\tthis.fieldStructure = field ? (this.table.options.nestedFieldSeparator ? field.split(this.table.options.nestedFieldSeparator) : [field]) : [];\r\n\t\tthis.getFieldValue = this.fieldStructure.length > 1 ? this._getNestedData : this._getFlatData;\r\n\t\tthis.setFieldValue = this.fieldStructure.length > 1 ? this._setNestedData : this._setFlatData;\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnPosition(column){\r\n\t\tthis.parent.registerColumnPosition(column);\r\n\t}\r\n\r\n\t//register column position with column manager\r\n\tregisterColumnField(column){\r\n\t\tthis.parent.registerColumnField(column);\r\n\t}\r\n\r\n\t//trigger position registration\r\n\treRegisterPosition(){\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolumn.reRegisterPosition();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tthis.registerColumnPosition(this);\r\n\t\t}\r\n\t}\r\n\r\n\t_mapDepricatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\tsetTooltip(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\t//set header tooltips\r\n\t\tvar tooltip = def.headerTooltip;\r\n\r\n\t\tif(tooltip){\r\n\t\t\tif(tooltip === true){\r\n\t\t\t\tif(def.field){\r\n\t\t\t\t\tthis.langBind(\"columns|\" + def.field, (value) => {\r\n\t\t\t\t\t\tthis.element.setAttribute(\"title\", value || def.title);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.element.setAttribute(\"title\", def.title);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof(tooltip) == \"function\"){\r\n\t\t\t\t\ttooltip = tooltip(this.getComponent());\r\n\r\n\t\t\t\t\tif(tooltip === false){\r\n\t\t\t\t\t\ttooltip = \"\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.element.setAttribute(\"title\", tooltip);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tthis.element.setAttribute(\"title\", \"\");\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element\r\n\t_initialize(){\r\n\t\tvar def = this.definition;\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\tif(def.headerVertical){\r\n\t\t\tthis.element.classList.add(\"tabulator-col-vertical\");\r\n\r\n\t\t\tif(def.headerVertical === \"flip\"){\r\n\t\t\t\tthis.element.classList.add(\"tabulator-col-vertical-flip\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.contentElement = this._bindEvents();\r\n\r\n\t\tthis.contentElement = this._buildColumnHeaderContent();\r\n\r\n\t\tthis.element.appendChild(this.contentElement);\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis._buildGroupHeader();\r\n\t\t}else{\r\n\t\t\tthis._buildColumnHeader();\r\n\t\t}\r\n\r\n\t\tthis.setTooltip();\r\n\r\n\t\tthis.dispatch(\"column-init\", this);\r\n\r\n\t\t//update header tooltip on mouse enter\r\n\t\tthis.element.addEventListener(\"mouseenter\", (e) => {\r\n\t\t\tthis.setTooltip();\r\n\t\t});\r\n\t}\r\n\r\n\t_bindEvents(){\r\n\t\tvar def = this.definition,\r\n\t\tdblTap,\ttapHold, tap;\r\n\r\n\t\t//setup header click event bindings\r\n\t\tif(typeof(def.headerClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"click\", (e) => {def.headerClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblClick) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"dblclick\", (e) => {def.headerDblClick(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerContext) == \"function\"){\r\n\t\t\tthis.element.addEventListener(\"contextmenu\", (e) => {def.headerContext(e, this.getComponent());});\r\n\t\t}\r\n\r\n\t\t//setup header tap event bindings\r\n\t\tif(typeof(def.headerTap) == \"function\"){\r\n\t\t\ttap = false;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\ttap = true;\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tif(tap){\r\n\t\t\t\t\tdef.headerTap(e, this.getComponent());\r\n\t\t\t\t}\r\n\r\n\t\t\t\ttap = false;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerDblTap) == \"function\"){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\r\n\t\t\t\tif(dblTap){\r\n\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\tdblTap = null;\r\n\r\n\t\t\t\t\tdef.headerDblTap(e, this.getComponent());\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\tdblTap = setTimeout(() => {\r\n\t\t\t\t\t\tclearTimeout(dblTap);\r\n\t\t\t\t\t\tdblTap = null;\r\n\t\t\t\t\t}, 300);\r\n\t\t\t\t}\r\n\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(typeof(def.headerTapHold) == \"function\"){\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchstart\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\r\n\t\t\t\ttapHold = setTimeout(function(){\r\n\t\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\t\ttapHold = null;\r\n\t\t\t\t\ttap = false;\r\n\t\t\t\t\tdef.headerTapHold(e, this.getComponent());\r\n\t\t\t\t}, 1000);\r\n\r\n\t\t\t}, {passive: true});\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for header\r\n\t_buildColumnHeader(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tthis.dispatch(\"column-layout\", this);\r\n\r\n\t\t//set column visibility\r\n\t\tif(typeof def.visible != \"undefined\"){\r\n\t\t\tif(def.visible){\r\n\t\t\t\tthis.show(true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.hide(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(def.cssClass){\r\n\t\t\tvar classeNames = def.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(def.field){\r\n\t\t\tthis.element.setAttribute(\"tabulator-field\", def.field);\r\n\t\t}\r\n\r\n\t\t//set min width if present\r\n\t\tthis.setMinWidth(parseInt(def.minWidth));\r\n\r\n\t\tif (def.maxInitialWidth) {\r\n\t\t\tthis.maxInitialWidth = parseInt(def.maxInitialWidth);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.maxWidth){\r\n\t\t\tthis.setMaxWidth(parseInt(def.maxWidth));\r\n\t\t}\r\n\r\n\t\tthis.reinitializeWidth();\r\n\r\n\t\t//set tooltip if present\r\n\t\tthis.tooltip = this.definition.tooltip;\r\n\r\n\t\t//set orizontal text alignment\r\n\t\tthis.hozAlign = this.definition.hozAlign;\r\n\t\tthis.vertAlign = this.definition.vertAlign;\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\t}\r\n\r\n\t_buildColumnHeaderContent(){\r\n\t\tvar def = this.definition,\r\n\t\ttable = this.table;\r\n\r\n\t\tvar contentElement = document.createElement(\"div\");\r\n\t\tcontentElement.classList.add(\"tabulator-col-content\");\r\n\r\n\t\tthis.titleHolderElement = document.createElement(\"div\");\r\n\t\tthis.titleHolderElement.classList.add(\"tabulator-col-title-holder\");\r\n\r\n\t\tcontentElement.appendChild(this.titleHolderElement);\r\n\r\n\t\tthis.titleElement = this._buildColumnHeaderTitle();\r\n\r\n\t\tthis.titleHolderElement.appendChild(this.titleElement);\r\n\r\n\t\treturn contentElement;\r\n\t}\r\n\r\n\t//build title element of column\r\n\t_buildColumnHeaderTitle(){\r\n\t\tvar def = this.definition,\r\n\t\ttitle;\r\n\r\n\t\tvar titleHolderElement = document.createElement(\"div\");\r\n\t\ttitleHolderElement.classList.add(\"tabulator-col-title\");\r\n\r\n\t\tif(def.editableTitle){\r\n\t\t\tvar titleElement = document.createElement(\"input\");\r\n\t\t\ttitleElement.classList.add(\"tabulator-title-editor\");\r\n\r\n\t\t\ttitleElement.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\ttitleElement.focus();\r\n\t\t\t});\r\n\r\n\t\t\ttitleElement.addEventListener(\"change\", () => {\r\n\t\t\t\tdef.title = titleElement.value;\r\n\t\t\t\tthis.dispatchExternal(\"columnTitleChanged\", this.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\ttitleHolderElement.appendChild(titleElement);\r\n\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\ttitleElement.value = text || (def.title || \" \");\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\ttitleElement.value = def.title || \" \";\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tif(def.field){\r\n\t\t\t\tthis.langBind(\"columns|\" + def.field, (text) => {\r\n\t\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, text || (def.title || \" \"));\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tthis._formatColumnHeaderTitle(titleHolderElement, def.title || \" \");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn titleHolderElement;\r\n\t}\r\n\r\n\t_formatColumnHeaderTitle(el, title){\r\n\t\tvar contents = this.chain(\"column-format\", [this, title, el], null, () => {\r\n\t\t\treturn title;\r\n\t\t});\r\n\r\n\t\tswitch(typeof contents){\r\n\t\t\tcase \"object\":\r\n\t\t\tif(contents instanceof Node){\r\n\t\t\t\tel.appendChild(contents);\r\n\t\t\t}else{\r\n\t\t\t\tel.innerHTML = \"\";\r\n\t\t\t\tconsole.warn(\"Format Error - Title formatter has returned a type of object, the only valid formatter object return is an instance of Node, the formatter returned:\", contents);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"undefined\":\r\n\t\t\tcase \"null\":\r\n\t\t\tel.innerHTML = \"\";\r\n\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\tel.innerHTML = contents;\r\n\t\t}\r\n\t}\r\n\r\n\t//build header element for column group\r\n\t_buildGroupHeader(){\r\n\t\tthis.element.classList.add(\"tabulator-col-group\");\r\n\t\tthis.element.setAttribute(\"role\", \"columngroup\");\r\n\t\tthis.element.setAttribute(\"aria-title\", this.definition.title);\r\n\r\n\t\t//asign additional css classes to column header\r\n\t\tif(this.definition.cssClass){\r\n\t\t\tvar classeNames = this.definition.cssClass.split(\" \");\r\n\t\t\tclasseNames.forEach((className) => {\r\n\t\t\t\tthis.element.classList.add(className);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.titleElement.style.textAlign = this.definition.headerHozAlign;\r\n\r\n\t\tthis.element.appendChild(this.groupElement);\r\n\t}\r\n\r\n\t//flat field lookup\r\n\t_getFlatData(data){\r\n\t\treturn data[this.field];\r\n\t}\r\n\r\n\t//nested field lookup\r\n\t_getNestedData(data){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length,\r\n\t\toutput;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tdataObj = dataObj[structure[i]];\r\n\r\n\t\t\toutput = dataObj;\r\n\r\n\t\t\tif(!dataObj){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//flat field set\r\n\t_setFlatData(data, value){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = value;\r\n\t\t}\r\n\t}\r\n\r\n\t//nested field set\r\n\t_setNestedData(data, value){\r\n\t\tvar dataObj = data,\r\n\t\tstructure = this.fieldStructure,\r\n\t\tlength = structure.length;\r\n\r\n\t\tfor(let i = 0; i < length; i++){\r\n\r\n\t\t\tif(i == length -1){\r\n\t\t\t\tdataObj[structure[i]] = value;\r\n\t\t\t}else{\r\n\t\t\t\tif(!dataObj[structure[i]]){\r\n\t\t\t\t\tif(typeof value !== \"undefined\"){\r\n\t\t\t\t\t\tdataObj[structure[i]] = {};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataObj = dataObj[structure[i]];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//attach column to this group\r\n\tattachColumn(column){\r\n\t\tif(this.groupElement){\r\n\t\t\tthis.columns.push(column);\r\n\t\t\tthis.groupElement.appendChild(column.getElement());\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Warning - Column being attached to another column instead of column group\");\r\n\t\t}\r\n\t}\r\n\r\n\t//vertically align header in column\r\n\tverticalAlign(alignment, height){\r\n\r\n\t\t//calculate height of column header and group holder element\r\n\t\tvar parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : (height || this.parent.getHeadersElement().clientHeight);\r\n\t\t// var parentHeight = this.parent.isGroup ? this.parent.getGroupElement().clientHeight : this.parent.getHeadersElement().clientHeight;\r\n\r\n\t\tthis.element.style.height = parentHeight + \"px\";\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.groupElement.style.minHeight = (parentHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t}\r\n\r\n\t\t//vertically align cell contents\r\n\t\tif(!this.isGroup && alignment !== \"top\"){\r\n\t\t\tif(alignment === \"bottom\"){\r\n\t\t\t\tthis.element.style.paddingTop = (this.element.clientHeight - this.contentElement.offsetHeight) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.paddingTop = ((this.element.clientHeight - this.contentElement.offsetHeight) / 2) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.verticalAlign(alignment);\r\n\t\t});\r\n\t}\r\n\r\n\t//clear vertical alignmenet\r\n\tclearVerticalAlign(){\r\n\t\tthis.element.style.paddingTop = \"\";\r\n\t\tthis.element.style.height = \"\";\r\n\t\tthis.element.style.minHeight = \"\";\r\n\t\tthis.groupElement.style.minHeight = \"\";\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\t\t});\r\n\t}\r\n\r\n\tbindModuleColumns (){\r\n\t\t//check if rownum formatter is being used on a column\r\n\t\tif(this.definition.formatter == \"rownum\"){\r\n\t\t\tthis.table.rowManager.rowNumColumn = this;\r\n\t\t}\r\n\t}\r\n\r\n\t//// Retreive Column Information ////\r\n\t//return column header element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return colunm group element\r\n\tgetGroupElement(){\r\n\t\treturn this.groupElement;\r\n\t}\r\n\r\n\t//return field name\r\n\tgetField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tgetTitleDownload() {\r\n\t\treturn this.titleDownload;\r\n\t}\r\n\r\n\t//return the first column in a group\r\n\tgetFirstColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[0].getFirstColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return the last column in a group\r\n\tgetLastColumn(){\r\n\t\tif(!this.isGroup){\r\n\t\t\treturn this;\r\n\t\t}else{\r\n\t\t\tif(this.columns.length){\r\n\t\t\t\treturn this.columns[this.columns.length -1].getLastColumn();\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\t//return all columns in a group\r\n\tgetCells(){\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\t//retreive the top column in a group of columns\r\n\tgetTopColumn(){\r\n\t\tif(this.parent.isGroup){\r\n\t\t\treturn this.parent.getTopColumn();\r\n\t\t}else{\r\n\t\t\treturn this;\r\n\t\t}\r\n\t}\r\n\r\n\t//return column definition object\r\n\tgetDefinition(updateBranches){\r\n\t\tvar colDefs = [];\r\n\r\n\t\tif(this.isGroup && updateBranches){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tcolDefs.push(column.getDefinition(true));\r\n\t\t\t});\r\n\r\n\t\t\tthis.definition.columns = colDefs;\r\n\t\t}\r\n\r\n\t\treturn this.definition;\r\n\t}\r\n\r\n\t//////////////////// Actions ////////////////////\r\n\tcheckColumnVisibility(){\r\n\t\tvar visible = false;\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvisible = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(visible){\r\n\t\t\tthis.show();\r\n\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t}else{\r\n\t\t\tthis.hide();\r\n\t\t}\r\n\t}\r\n\r\n\t//show column\r\n\tshow(silent, responsiveToggle){\r\n\t\tif(!this.visible){\r\n\t\t\tthis.visible = true;\r\n\r\n\t\t\tthis.element.style.display = \"\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.show();\r\n\t\t\t});\r\n\r\n\t\t\tif(!this.isGroup && this.width === null){\r\n\t\t\t\tthis.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tthis.dispatch(\"column-show\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//hide column\r\n\thide(silent, responsiveToggle){\r\n\t\tif(this.visible){\r\n\t\t\tthis.visible = false;\r\n\r\n\t\t\tthis.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.columnManager.verticalAlignHeaders();\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.checkColumnVisibility();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.hide();\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatch(\"column-hide\", this, responsiveToggle);\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.dispatchExternal(\"columnVisibilityChanged\", this.getComponent(), false);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\r\n\t\t\tif(!this.silent){\r\n\t\t\t\tthis.table.columnManager.renderer.rerenderColumns();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmatchChildWidths(){\r\n\t\tvar childWidth = 0;\r\n\r\n\t\tif(this.contentElement && this.columns.length){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\tchildWidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.contentElement.style.maxWidth = (childWidth - 1) + \"px\";\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.matchChildWidths();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tremoveChild(child){\r\n\t\tvar index = this.columns.indexOf(child);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tif(!this.columns.length){\r\n\t\t\tthis.delete();\r\n\t\t}\r\n\t}\r\n\r\n\tsetWidth(width){\r\n\t\tthis.widthFixed = true;\r\n\t\tthis.setWidthActual(width);\r\n\t}\r\n\r\n\tsetWidthActual(width){\r\n\t\tif(isNaN(width)){\r\n\t\t\twidth = Math.floor((this.table.element.clientWidth/100) * parseInt(width));\r\n\t\t}\r\n\r\n\t\twidth = Math.max(this.minWidth, width);\r\n\r\n\t\tif(this.maxWidth){\r\n\t\t\twidth = Math.min(this.maxWidth, width);\r\n\t\t}\r\n\r\n\t\tthis.width = width;\r\n\t\tthis.widthStyled = width ? width + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.width = this.widthStyled;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tthis.cells.forEach(function(cell){\r\n\t\t\t\tcell.setWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.parent.isGroup){\r\n\t\t\tthis.parent.matchChildWidths();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width\", this);\r\n\t}\r\n\r\n\tcheckCellHeights(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tif(cell.row.heightInitialized){\r\n\t\t\t\tif(cell.row.getElement().offsetParent !== null){\r\n\t\t\t\t\trows.push(cell.row);\r\n\t\t\t\t\tcell.row.clearCellHeight();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcell.row.heightInitialized = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.calcHeight();\r\n\t\t});\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\trow.setCellHeight();\r\n\t\t});\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tif(this.isGroup){\r\n\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\tif(column.visible){\r\n\t\t\t\t\twidth += column.getWidth();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\twidth = this.width;\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tgetHeight(){\r\n\t\treturn Math.ceil(this.element.getBoundingClientRect().height);\r\n\t}\r\n\r\n\tsetMinWidth(minWidth){\r\n\t\tthis.minWidth = minWidth;\r\n\t\tthis.minWidthStyled = minWidth ? minWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.minWidth = this.minWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMinWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tsetMaxWidth(maxWidth){\r\n\t\tthis.maxWidth = maxWidth;\r\n\t\tthis.maxWidthStyled = maxWidth ? maxWidth + \"px\" : \"\";\r\n\r\n\t\tthis.element.style.maxWidth = this.maxWidthStyled;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setMaxWidth();\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar index;\r\n\r\n\t\t\tif(this.isGroup){\r\n\t\t\t\tthis.columns.forEach(function(column){\r\n\t\t\t\t\tcolumn.delete();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"column-delete\", this);\r\n\r\n\t\t\tvar cellCount = this.cells.length;\r\n\r\n\t\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\t\tthis.cells[0].delete();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element = false;\r\n\t\t\tthis.contentElement = false;\r\n\t\t\tthis.titleElement = false;\r\n\t\t\tthis.groupElement = false;\r\n\r\n\t\t\tif(this.parent.isGroup){\r\n\t\t\t\tthis.parent.removeChild(this);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.columnManager.deregisterColumn(this);\r\n\r\n\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tcolumnRendered(){\r\n\t\tif(this.titleFormatterRendered){\r\n\t\t\tthis.titleFormatterRendered();\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\t//generate cell for this column\r\n\tgenerateCell(row){\r\n\t\tvar cell = new Cell(this, row);\r\n\r\n\t\tthis.cells.push(cell);\r\n\r\n\t\treturn cell;\r\n\t}\r\n\r\n\tnextColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._nextVisibleColumn(index + 1) : false;\r\n\t}\r\n\r\n\t_nextVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._nextVisibleColumn(index + 1);\r\n\t}\r\n\r\n\tprevColumn(){\r\n\t\tvar index = this.table.columnManager.findColumnIndex(this);\r\n\t\treturn index > -1 ? this._prevVisibleColumn(index - 1) : false;\r\n\t}\r\n\r\n\t_prevVisibleColumn(index){\r\n\t\tvar column = this.table.columnManager.getColumnByIndex(index);\r\n\t\treturn !column || column.visible ? column : this._prevVisibleColumn(index - 1);\r\n\t}\r\n\r\n\treinitializeWidth(force){\r\n\t\tthis.widthFixed = false;\r\n\r\n\t\t//set width if present\r\n\t\tif(typeof this.definition.width !== \"undefined\" && !force){\r\n\t\t\t// maxInitialWidth ignored here as width specified\r\n\t\t\tthis.setWidth(this.definition.width);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"column-width-fit-before\", this);\r\n\r\n\t\tthis.fitToData(force);\r\n\r\n\t\tthis.dispatch(\"column-width-fit-after\", this);\r\n\t}\r\n\r\n\t//set column width to maximum cell width for non group columns\r\n\tfitToData(force){\r\n\t\tif(this.isGroup){\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif(!this.widthFixed){\r\n\t\t\tthis.element.style.width = \"\";\r\n\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tcell.clearWidth();\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvar maxWidth = this.element.offsetWidth;\r\n\r\n\t\tif(!this.width || !this.widthFixed){\r\n\t\t\tthis.cells.forEach((cell) => {\r\n\t\t\t\tvar width = cell.getWidth();\r\n\r\n\t\t\t\tif(width > maxWidth){\r\n\t\t\t\t\tmaxWidth = width;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(maxWidth){\r\n\t\t\t\tvar setTo = maxWidth + 1;\r\n\t\t\t\tif (this.maxInitialWidth && !force) {\r\n\t\t\t\t\tsetTo = Math.min(setTo, this.maxInitialWidth);\r\n\t\t\t\t}\r\n\t\t\t\tthis.setWidthActual(setTo);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tupdateDefinition(updates){\r\n\t\tvar definition;\r\n\r\n\t\tif(!this.isGroup){\r\n\t\t\tif(!this.parent.isGroup){\r\n\t\t\t\tdefinition = Object.assign({}, this.getDefinition());\r\n\t\t\t\tdefinition = Object.assign(definition, updates);\r\n\r\n\t\t\t\treturn this.table.columnManager.addColumn(definition, false, this)\r\n\t\t\t\t.then((column) => {\r\n\r\n\t\t\t\t\tif(definition.field == this.field){\r\n\t\t\t\t\t\tthis.field = false; //cleair field name to prevent deletion of duplicate column from arrays\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn this.delete()\r\n\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Column Update Error - The updateDefinition function is only available on ungrouped columns\");\r\n\t\t\treturn Promise.reject(\"Column Update Error - The updateDefinition function is only available on columns, not column groups\");\r\n\t\t}\r\n\t}\r\n\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new ColumnComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nColumn.defaultOptionList = defaultOptions;\r\n\r\nexport default Column;","export default class Helpers{\r\n\r\n\tstatic elVisible(el){\r\n\t\treturn !(el.offsetWidth <= 0 && el.offsetHeight <= 0);\r\n\t}\r\n\r\n\tstatic elOffset(el){\r\n\t\tvar box = el.getBoundingClientRect();\r\n\r\n\t\treturn {\r\n\t\t\ttop: box.top + window.pageYOffset - document.documentElement.clientTop,\r\n\t\t\tleft: box.left + window.pageXOffset - document.documentElement.clientLeft\r\n\t\t};\r\n\t}\r\n\r\n\tstatic deepClone(obj, clone, list = []){\r\n\t\tvar objectProto = {}.__proto__,\r\n\t\tarrayProto = [].__proto__;\r\n\r\n\t\tif (!clone){\r\n\t\t\tclone = Object.assign(Array.isArray(obj) ? [] : {}, obj);\r\n\t\t}\r\n\r\n\t\tfor(var i in obj) {\r\n\t\t\tlet subject = obj[i],\r\n\t\t\tmatch, copy;\r\n\r\n\t\t\tif(subject != null && typeof subject === \"object\" && (subject.__proto__ === objectProto || subject.__proto__ === arrayProto)){\r\n\t\t\t\tmatch = list.findIndex((item) => {\r\n\t\t\t\t\treturn item.subject === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(match > -1){\r\n\t\t\t\t\tclone[i] = list[match].copy;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcopy = Object.assign(Array.isArray(subject) ? [] : {}, subject);\r\n\r\n\t\t\t\t\tlist.unshift({subject, copy});\r\n\r\n\t\t\t\t\tclone[i] = this.deepClone(subject, copy, list);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn clone;\r\n\t}\r\n}","export default class OptionsList {\r\n\tconstructor(table, msgType, defaults = {}){\r\n\t\tthis.table = table;\r\n\t\tthis.msgType = msgType;\r\n\t\tthis.registeredDefaults = Object.assign({}, defaults)\r\n\t}\r\n\r\n\tregister(option, value){\r\n\t\tthis.registeredDefaults[option] = value;\r\n\t}\r\n\r\n\tgenerate(defaultOptions, userOptions = {}){\r\n\t\tvar output = Object.assign({}, this.registeredDefaults);\r\n\r\n\t\tObject.assign(output, defaultOptions);\r\n\r\n\t\tif(userOptions.debugInvalidOptions !== false || this.table.options.debugInvalidOptions){\r\n\t\t\tfor (var key in userOptions){\r\n\t\t\t\tif(!output.hasOwnProperty(key)){\r\n\t\t\t\t\tconsole.warn(\"Invalid \" + this.msgType + \" option:\", key)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (var key in output){\r\n\t\t\tif(key in userOptions){\r\n\t\t\t\toutput[key] = userOptions[key];\r\n\t\t\t}else{\r\n\t\t\t\tif(Array.isArray(output[key])){\r\n\t\t\t\t\toutput[key] = Object.assign([], output[key]);\r\n\t\t\t\t}else if(typeof output[key] === \"object\" && output[key] !== null){\r\n\t\t\t\t\toutput[key] = Object.assign({}, output[key]);\r\n\t\t\t\t}else if (typeof output[key] === \"undefined\"){\r\n\t\t\t\t\tdelete output[key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Renderer extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.elementVertical = table.rowManager.element;\r\n\t\tthis.elementHorizontal = table.columnManager.element;\r\n\t\tthis.tableElement = table.rowManager.tableElement;\r\n\r\n\t\tthis.verticalFillMode = \"fit\"; // used by row manager to determin how to size the render area (\"fit\" - fits container to the contents, \"fill\" - fills the contianer without resizing it)\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t/////// Internal Bindings /////////\r\n\t///////////////////////////////////\r\n\r\n\tinitialize(){\r\n\t\t//initialize core functionality\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\t//clear down existing rows layout\r\n\t}\r\n\r\n\tclearColumns(){\r\n\t\t//clear down existing columns layout\r\n\t}\r\n\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\t//resize columns to fit data\r\n\t}\r\n\r\n\r\n\trenderRows(){\r\n\t\t//render rows from a clean slate\r\n\t}\r\n\r\n\trenderColumns(){\r\n\t\t//render columns from a clean slate\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\t// rerender rows and keep position\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\trerenderColumns(update, blockRedraw){\r\n\t\t//rerender columns\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\t//render the cells in a row\r\n\t}\r\n\r\n\trerenderRowCells(row, force){\r\n\t\t//rerender the cells in a row\r\n\t}\r\n\r\n\tscrollColumns(left, dir){\r\n\t\t//handle horizontal scrolling\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\t//handle vertical scolling\r\n\t}\r\n\r\n\tresize(){\r\n\t\t//container has rezied, carry out any needed recalculations (DO NOT RERENDER IN THIS FUNCTION)\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\t//scroll to a specific row\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\t//determine weather the row is nearest the top or bottom of the table, retur true for top or false for bottom\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\t//return the visible rows\r\n\t\treturn [];\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t//////// Helper Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\trows(){\r\n\t\treturn this.table.rowManager.getDisplayRows();\r\n\t}\r\n\r\n\tstyleRow(row, index){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tif(index % 2){\r\n\t\t\trowEl.classList.add(\"tabulator-row-even\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-odd\");\r\n\t\t}else{\r\n\t\t\trowEl.classList.add(\"tabulator-row-odd\");\r\n\t\t\trowEl.classList.remove(\"tabulator-row-even\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/////// External Triggers /////////\r\n\t/////// (DO NOT OVERRIDE) /////////\r\n\t///////////////////////////////////\r\n\r\n\tclear(){\r\n\t\t//clear down existing layout\r\n\t\tthis.clearRows();\r\n\t\tthis.clearColumns();\r\n\t}\r\n\r\n\trender(){\r\n\t\t//render from a clean slate\r\n\t\tthis.renderRows();\r\n\t\tthis.renderColumns();\r\n\t}\r\n\r\n\trerender(callback){\r\n\t\t// rerender and keep position\r\n\t\tthis.rerenderRows();\r\n\t\tthis.rerenderColumns();\r\n\t}\r\n\r\n\tscrollToRowPosition(row, position, ifVisible){\r\n\t\tvar rowIndex = this.rows().indexOf(row),\r\n\t\trowEl = row.getElement(),\r\n\t\toffset = 0;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tif(rowIndex > -1){\r\n\r\n\t\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\t\tifVisible = this.table.options.scrollToRowIfVisible;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check row visibility\r\n\t\t\t\tif(!ifVisible){\r\n\t\t\t\t\tif(Helpers.elVisible(rowEl)){\r\n\t\t\t\t\t\toffset = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(offset > 0 && offset < this.elementVertical.clientHeight - rowEl.offsetHeight){\r\n\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\t\tposition = this.table.options.scrollToRowPosition;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(position === \"nearest\"){\r\n\t\t\t\t\tposition = this.scrollToRowNearestTop(row) ? \"top\" : \"bottom\"\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scroll to row\r\n\t\t\t\tthis.scrollToRow(row);\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop + (rowEl.offsetTop - this.elementVertical.scrollTop) - ((this.elementVertical.scrollHeight - rowEl.offsetTop) / 2);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.clientHeight / 2);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"bottom\":\r\n\r\n\t\t\t\t\tif(this.elementVertical.scrollHeight - this.elementVertical.scrollTop == this.elementVertical.clientHeight){\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - (this.elementVertical.scrollHeight - rowEl.offsetTop) + rowEl.offsetHeight;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.elementVertical.scrollTop = this.elementVertical.scrollTop - this.elementVertical.clientHeight + rowEl.offsetHeight;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tresolve();\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Row not visible\");\r\n\t\t\t\treject(\"Scroll Error - Row not visible\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\trenderRowCells(row){\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\tcell.cellRendered();\r\n\t\t});\r\n\t}\r\n\r\n\treinitializeColumnWidths(columns){\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t});\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomHorizontal extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.leftCol = 0;\r\n\t\tthis.rightCol = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\t\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t\t\r\n\t\tthis.fitDataColAvg = 0;\r\n\t\t\r\n\t\tthis.window = 200; //pixel margin to make column visible before it is shown on screen\r\n\t\t\r\n\t\tthis.initialized = false;\r\n\t\t\r\n\t\tthis.columns = [];\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.compatibilityCheck();\r\n\t}\r\n\t\r\n\tcompatibilityCheck(){\r\n\t\tvar columns = this.options(\"columns\"),\r\n\t\tfrozen = false,\r\n\t\tok = true;\r\n\t\t\r\n\t\tif(this.options(\"layout\") == \"fitDataTable\"){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with fitDataTable layout mode\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"responsiveLayout\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with responsive columns\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.options(\"rtl\")){\r\n\t\t\tconsole.warn(\"Horizontal Virtual DOM is not currently compatible with RTL text direction\");\r\n\t\t\tok = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(columns){\r\n\t\t\tfrozen = columns.find((col) => {\r\n\t\t\t\treturn col.frozen;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(frozen){\r\n\t\t\t\tconsole.warn(\"Horizontal Virtual DOM is not compatible with frozen columns\");\r\n\t\t\t\tok = false;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t// if(!ok){\r\n\t\t// \toptions.virtualDomHoz = false;\r\n\t\t// }\r\n\t\t\r\n\t\treturn ok;\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\t\r\n\trenderColumns(row, force){\r\n\t\tthis.dataChange();\r\n\t}\r\n\t\r\n\tscrollColumns(left, dir){\r\n\t\tif(this.scrollLeft != left){\r\n\t\t\tthis.scrollLeft = left;\r\n\t\t\t\r\n\t\t\tthis.scroll(left - (this.vDomScrollPosLeft + this.window));\r\n\t\t}\r\n\t}\r\n\t\r\n\trerenderColumns(update, blockRedraw){\t\t\r\n\t\tvar old = {\r\n\t\t\tcols:this.columns,\r\n\t\t\tleftCol:this.leftCol,\r\n\t\t\trightCol:this.rightCol,\r\n\t\t};\r\n\t\t\r\n\t\tif(update && !this.initialized){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tthis.clear();\r\n\t\t\r\n\t\tthis.scrollLeft = this.elementVertical.scrollLeft;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = this.scrollLeft - this.window;\r\n\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\t\t\r\n\t\tvar colPos = 0;\r\n\t\t\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tvar config = {};\r\n\t\t\t\r\n\t\t\tif(column.visible){\r\n\t\t\t\tvar width = column.getWidth();\r\n\t\t\t\t\r\n\t\t\t\tconfig.leftPos = colPos;\r\n\t\t\t\tconfig.rightPos = colPos + width;\r\n\t\t\t\t\r\n\t\t\t\tconfig.width = width;\r\n\t\t\t\t\r\n\t\t\t\tif (this.options(\"layout\") === \"fitData\") {\r\n\t\t\t\t\tconfig.fitDataCheck = column.modules.vdomHoz ? column.modules.vdomHoz.fitDataCheck : true;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif((colPos + width > this.vDomScrollPosLeft) && (colPos < this.vDomScrollPosRight)){\r\n\t\t\t\t\t//column is visible\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.leftCol == -1){\r\n\t\t\t\t\t\tthis.leftCol = this.columns.length;\r\n\t\t\t\t\t\tthis.vDomPadLeft = colPos;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.rightCol = this.columns.length;\r\n\t\t\t\t}else{\r\n\t\t\t\t\t// column is hidden\r\n\t\t\t\t\tif(this.leftCol !== -1){\r\n\t\t\t\t\t\tthis.vDomPadRight += width;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\t\r\n\t\t\t\tcolumn.modules.vdomHoz = config;\r\n\t\t\t\t\r\n\t\t\t\tcolPos += width;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\r\n\t\tthis.initialized = true;\r\n\t\t\r\n\t\tif(!blockRedraw){\r\n\t\t\tif(!update || this.reinitChanged(old)){\r\n\t\t\t\tthis.reinitializeRows();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.elementVertical.scrollLeft = this.scrollLeft;\r\n\t}\r\n\t\r\n\trenderRowCells(row){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.initializeRow(row);\r\n\t\t}else{\r\n\t\t\trow.cells.forEach((cell) => {\r\n\t\t\t\trow.element.appendChild(cell.getElement());\r\n\t\t\t\tcell.cellRendered();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\trerenderRowCells(row, force){\r\n\t\tthis.reinitializeRow(row, force);\r\n\t}\r\n\t\r\n\treinitializeColumnWidths(columns){\r\n\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\tthis.columns[i].reinitializeWidth();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\t\r\n\tdeinitialize(){\r\n\t\tthis.initialized = false;\r\n\t}\r\n\t\r\n\tclear(){\r\n\t\tthis.columns = [];\r\n\t\t\r\n\t\tthis.leftCol = -1;\r\n\t\tthis.rightCol = 0;\r\n\t\t\r\n\t\tthis.vDomScrollPosLeft = 0;\r\n\t\tthis.vDomScrollPosRight = 0;\r\n\t\tthis.vDomPadLeft = 0;\r\n\t\tthis.vDomPadRight = 0;\r\n\t}\r\n\t\r\n\tdataChange(){\r\n\t\tvar change = false,\r\n\t\tcollsWidth = 0,\r\n\t\tcolEnd = 0,\r\n\t\tgroup, row, rowEl;\r\n\t\t\r\n\t\tif(this.options(\"layout\") === \"fitData\"){\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\t\tif(!column.definition.width && column.visible){\r\n\t\t\t\t\tchange = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(change){\r\n\t\t\t\tif(change && this.table.rowManager.getDisplayRows().length){\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.vDomScrollPosRight = this.scrollLeft + this.elementVertical.clientWidth + this.window;\r\n\t\t\t\t\t\r\n\t\t\t\t\tvar row = this.chain(\"rows-sample\", [1], [], () => {\r\n\t\t\t\t\t\treturn this.table.rowManager.getDisplayRows()[0];\r\n\t\t\t\t\t})[0];\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trowEl = row.getElement();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trow.generateCells();\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.tableElement.appendChild(rowEl);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(var colEnd = 0; colEnd < row.cells.length; colEnd++){\r\n\t\t\t\t\t\t\tlet cell = row.cells[colEnd];\r\n\t\t\t\t\t\t\trowEl.appendChild(cell.getElement());\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcell.column.reinitializeWidth();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tcollsWidth += cell.column.getWidth();\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(collsWidth > this.vDomScrollPosRight){\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.fitDataColAvg = Math.floor(collsWidth / (colEnd + 1));\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tfor(colEnd; colEnd < this.table.columnManager.columnsByIndex.length; colEnd++){\r\n\t\t\t\t\t\t\tthis.table.columnManager.columnsByIndex[colEnd].setWidth(this.fitDataColAvg);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.options(\"layout\") === \"fitColumns\"){\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t\tthis.rerenderColumns(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitChanged(old){\r\n\t\tvar match = true;\r\n\t\t\r\n\t\tif(old.cols.length !== this.columns.length || old.leftCol !== this.leftCol || old.rightCol !== this.rightCol){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\t\r\n\t\told.cols.forEach((col, i) => {\r\n\t\t\tif(col !== this.columns[i]){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\treturn !match;\r\n\t}\r\n\t\r\n\treinitializeRows(){\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\trows.forEach((row) => {\r\n\t\t\tthis.reinitializeRow(row, true);\r\n\t\t});\r\n\t}\r\n\t\r\n\tscroll(diff){\r\n\t\tthis.vDomScrollPosLeft += diff;\r\n\t\tthis.vDomScrollPosRight += diff;\r\n\t\t\r\n\t\tif(diff > (this.elementVertical.clientWidth * .8)){\r\n\t\t\tthis.rerenderColumns();\r\n\t\t}else{\r\n\t\t\tif(diff > 0){\r\n\t\t\t\t//scroll right\r\n\t\t\t\tthis.addColRight();\r\n\t\t\t\tthis.removeColLeft();\r\n\t\t\t}else{\r\n\t\t\t\t//scroll left\r\n\t\t\t\tthis.addColLeft();\r\n\t\t\t\tthis.removeColRight();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tcolPositionAdjust (start, end, diff){\r\n\t\tfor(let i = start; i < end; i++){\r\n\t\t\tlet column = this.columns[i];\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.leftPos += diff;\r\n\t\t\tcolumn.modules.vdomHoz.rightPos += diff;\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColRight(){\r\n\t\tvar column = this.columns[this.rightCol + 1],\r\n\t\trows, newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.leftPos <= this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\r\n\t\t\tthis.rightCol++; // Don't move this below the >= check below\r\n\t\t\t\r\n\t\t\tif(this.rightCol >= (this.columns.length - 1)){\r\n\t\t\t\tthis.vDomPadRight = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadRight -= column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\t\r\n\t\t\tthis.addColRight();\r\n\t\t}\r\n\t}\r\n\t\r\n\taddColLeft(){\r\n\t\tvar column = this.columns[this.leftCol - 1],\r\n\t\trows;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.rightPos >= this.vDomScrollPosLeft){\r\n\t\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\trow.getElement().prepend(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.fitDataColActualWidthCheck(column);\r\n\t\t\t\r\n\t\t\tthis.leftCol--; // don't move this below the <= check below\r\n\r\n\t\t\tif(this.leftCol <= 0){ // replicating logic in addColRight\r\n\t\t\t\tthis.vDomPadLeft = 0;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomPadLeft -= column.getWidth();\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tthis.addColLeft();\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColRight(column){\r\n\t\tvar column = this.columns[this.rightCol],\r\n\t\trows;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.leftPos > this.vDomScrollPosRight){\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.visible = false;\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tvar cell = row.getCell(column);\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\trow.getElement().removeChild(cell.getElement());\r\n\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\tconsole.warn(\"Could not removeColRight\", ex.message)\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.vDomPadRight += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingRight = this.vDomPadRight + \"px\";\r\n\t\t\t\r\n\t\t\tthis.rightCol --;\r\n\t\t\t\r\n\t\t\tthis.removeColRight();\r\n\t\t}\r\n\t}\r\n\t\r\n\tremoveColLeft(){\r\n\t\tvar column = this.columns[this.leftCol],\r\n\t\trows;\r\n\t\t\r\n\t\tif(column && column.modules.vdomHoz.rightPos < this.vDomScrollPosLeft){\t\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\t\t\t\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tvar cell, el;\r\n\r\n\t\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\t\tcell = row.getCell(column);\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tel = cell.getElement();\r\n\r\n\t\t\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\trow.getElement().removeChild(el);\r\n\t\t\t\t\t\t\t} catch (ex) {\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Could not removeColLeft\", ex.message)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.vDomPadLeft += column.getWidth();\r\n\t\t\tthis.tableElement.style.paddingLeft = this.vDomPadLeft + \"px\";\r\n\t\t\t\r\n\t\t\tthis.leftCol ++;\r\n\t\t\t\r\n\t\t\tthis.removeColLeft();\r\n\t\t}\r\n\t}\r\n\t\r\n\tfitDataColActualWidthCheck(column){\r\n\t\tvar newWidth, widthDiff;\r\n\t\t\r\n\t\tif(column.modules.vdomHoz.fitDataCheck){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t\r\n\t\t\tnewWidth = column.getWidth();\r\n\t\t\twidthDiff = newWidth - column.modules.vdomHoz.width;\r\n\t\t\t\r\n\t\t\tif(widthDiff){\r\n\t\t\t\tcolumn.modules.vdomHoz.rightPos += widthDiff;\r\n\t\t\t\tcolumn.modules.vdomHoz.width = newWidth;\r\n\t\t\t\tthis.colPositionAdjust(this.rightCol + 2, this.columns.length, widthDiff);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tcolumn.modules.vdomHoz.fitDataCheck = false;\r\n\t\t}\r\n\t};\r\n\t\r\n\tinitializeRow(row){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\trow.modules.vdomHoz = {\r\n\t\t\t\tleftCol:this.leftCol,\r\n\t\t\t\trightCol:this.rightCol,\r\n\t\t\t};\r\n\t\t\t\r\n\t\t\tfor(let i = this.leftCol; i <= this.rightCol; i++){\r\n\t\t\t\tlet column = this.columns[i];\r\n\t\t\t\t\r\n\t\t\t\tif(column && column.visible){\r\n\t\t\t\t\tlet cell = row.getCell(column);\r\n\t\t\t\t\t\r\n\t\t\t\t\trow.getElement().appendChild(cell.getElement());\r\n\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\treinitializeRow(row, force){\r\n\t\tif(row.type !== \"group\"){\r\n\t\t\tif(force || !row.modules.vdomHoz || row.modules.vdomHoz.leftCol !== this.leftCol || row.modules.vdomHoz.rightCol !== this.rightCol){\r\n\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\twhile(rowEl.firstChild) rowEl.removeChild(rowEl.firstChild);\r\n\t\t\t\t\r\n\t\t\t\tthis.initializeRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Column from './column/Column.js';\r\nimport ColumnComponent from './column/ColumnComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nimport RendererBasicHorizontal from './rendering/renderers/BasicHorizontal.js';\r\nimport RendererVirtualDomHorizontal from './rendering/renderers/VirtualDomHorizontal.js';\r\n\r\nimport defaultColumnOptions from './column/defaults/options.js';\r\n\r\nexport default class ColumnManager extends CoreFeature {\r\n\r\n\tconstructor (table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.blockHozScrollEvent = false;\r\n\t\tthis.headersElement = null;\r\n\t\tthis.element = null ; //containing element\r\n\t\tthis.columns = []; // column definition object\r\n\t\tthis.columnsByIndex = []; //columns by index\r\n\t\tthis.columnsByField = {}; //columns by field\r\n\t\tthis.scrollLeft = 0;\r\n\t\tthis.optionsList = new OptionsList(this.table, \"column definition\", defaultColumnOptions);\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t////////////// Setup Functions /////////////////\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\tthis.headersElement = this.createHeadersElement();\r\n\t\tthis.element = this.createHeaderElement();\r\n\r\n\t\tthis.element.insertBefore(this.headersElement, this.element.firstChild);\r\n\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\r\n\t\tvar renderers = {\r\n\t\t\t\"virtual\": RendererVirtualDomHorizontal,\r\n\t\t\t\"basic\": RendererBasicHorizontal,\r\n\t\t};\r\n\r\n\t\tif(typeof this.table.options.renderHorizontal === \"string\"){\r\n\t\t\trenderClass = renderers[this.table.options.renderHorizontal];\r\n\t\t}else{\r\n\t\t\trenderClass = this.table.options.renderHorizontal;\r\n\t\t}\r\n\r\n\t\tif(renderClass){\r\n\t\t\tthis.renderer = new renderClass(this.table, this.element, this.tableElement);\r\n\t\t\tthis.renderer.initialize();\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderHorizontal);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tcreateHeadersElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-headers\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateHeaderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-header\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\tif(!this.table.options.headerVisible){\r\n\t\t\tel.classList.add(\"tabulator-header-hidden\");\r\n\t\t}\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return header containing element\r\n\tgetHeadersElement(){\r\n\t\treturn this.headersElement;\r\n\t}\r\n\r\n\t//scroll horizontally to match table body\r\n\tscrollHorizontal(left){\r\n\t\tvar hozAdjust = 0,\r\n\t\tscrollWidth = this.element.scrollWidth - this.table.element.clientWidth;\r\n\r\n\t\t// this.tempScrollBlock();\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\t//adjust for vertical scrollbar moving table when present\r\n\t\tif(left > scrollWidth){\r\n\t\t\thozAdjust = left - scrollWidth;\r\n\t\t\tthis.element.style.marginLeft = (-(hozAdjust)) + \"px\";\r\n\t\t}else{\r\n\t\t\tthis.element.style.marginLeft = 0;\r\n\t\t}\r\n\r\n\t\tthis.scrollLeft = left;\r\n\r\n\t\tthis.renderer.scrollColumns(left);\r\n\t}\r\n\r\n\t///////////// Column Setup Functions /////////////\r\n\tgenerateColumnsFromRowData(data){\r\n\t\tvar cols = [],\r\n\t\tdefinitions = this.table.options.autoColumnsDefinitions,\r\n\t\trow, sorter;\r\n\r\n\t\tif(data && data.length){\r\n\r\n\t\t\trow = data[0];\r\n\r\n\t\t\tfor(var key in row){\r\n\t\t\t\tlet col = {\r\n\t\t\t\t\tfield:key,\r\n\t\t\t\t\ttitle:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tlet value = row[key];\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(value)){\r\n\t\t\t\t\t\tsorter = \"array\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcol.sorter = sorter;\r\n\r\n\t\t\t\tcols.push(col);\r\n\t\t\t}\r\n\r\n\t\t\tif(definitions){\r\n\r\n\t\t\t\tswitch(typeof definitions){\r\n\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\tthis.table.options.columns = definitions.call(this.table, cols);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tif(Array.isArray(definitions)){\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tvar match = definitions.find((def) => {\r\n\t\t\t\t\t\t\t\treturn def.field === col.field;\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tif(match){\r\n\t\t\t\t\t\t\t\tObject.assign(col, match);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\t\tif(definitions[col.field]){\r\n\t\t\t\t\t\t\t\tObject.assign(col, definitions[col.field]);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.options.columns = cols;\r\n\t\t\t}\r\n\r\n\t\t\tthis.setColumns(this.table.options.columns);\r\n\t\t}\r\n\t}\r\n\r\n\tsetColumns(cols, row){\r\n\t\twhile(this.headersElement.firstChild) this.headersElement.removeChild(this.headersElement.firstChild);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.columnsByIndex = [];\r\n\t\tthis.columnsByField = {};\r\n\r\n\t\tthis.dispatch(\"columns-loading\");\r\n\r\n\t\tcols.forEach((def, i) => {\r\n\t\t\tthis._addColumn(def);\r\n\t\t});\r\n\r\n\t\tthis._reIndexColumns();\r\n\r\n\t\tthis.dispatch(\"columns-loaded\");\r\n\r\n\t\tthis.renderer.rerenderColumns(false, true);\r\n\r\n\t\tthis.redraw(true);\r\n\t}\r\n\r\n\t_addColumn(definition, before, nextToColumn){\r\n\t\tvar column = new Column(definition, this),\r\n\t\tcolEl = column.getElement(),\r\n\t\tindex = nextToColumn ? this.findColumnIndex(nextToColumn) : nextToColumn;\r\n\r\n\t\tif(nextToColumn && index > -1){\r\n\t\t\tvar topColumn = nextToColumn.getTopColumn()\r\n\t\t\tvar parentIndex = this.columns.indexOf(topColumn);\r\n\t\t\tvar nextEl = topColumn.getElement();\r\n\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.splice(parentIndex, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.splice(parentIndex + 1, 0, column);\r\n\t\t\t\tnextEl.parentNode.insertBefore(colEl, nextEl.nextSibling);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(before){\r\n\t\t\t\tthis.columns.unshift(column);\r\n\t\t\t\tthis.headersElement.insertBefore(column.getElement(), this.headersElement.firstChild);\r\n\t\t\t}else{\r\n\t\t\t\tthis.columns.push(column);\r\n\t\t\t\tthis.headersElement.appendChild(column.getElement());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcolumn.columnRendered();\r\n\r\n\t\treturn column;\r\n\t}\r\n\r\n\tregisterColumnField(col){\r\n\t\tif(col.definition.field){\r\n\t\t\tthis.columnsByField[col.definition.field] = col;\r\n\t\t}\r\n\t}\r\n\r\n\tregisterColumnPosition(col){\r\n\t\tthis.columnsByIndex.push(col);\r\n\t}\r\n\r\n\t_reIndexColumns(){\r\n\t\tthis.columnsByIndex = [];\r\n\r\n\t\tthis.columns.forEach(function(column){\r\n\t\t\tcolumn.reRegisterPosition();\r\n\t\t});\r\n\t}\r\n\r\n\t//ensure column headers take up the correct amount of space in column groups\r\n\tverticalAlignHeaders(){\r\n\t\tvar minHeight = 0;\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tvar height;\r\n\r\n\t\t\tcolumn.clearVerticalAlign();\r\n\r\n\t\t\theight = column.getHeight();\r\n\r\n\t\t\tif(height > minHeight){\r\n\t\t\t\tminHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\tcolumn.verticalAlign(this.table.options.columnHeaderVertAlign, minHeight);\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\t//////////////// Column Details /////////////////\r\n\tfindColumn(subject){\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Column){\r\n\t\t\t\t//subject is column element\r\n\t\t\t\treturn subject;\r\n\t\t\t}else if(subject instanceof ColumnComponent){\r\n\t\t\t\t//subject is public column component\r\n\t\t\t\treturn subject._getSelf() || false;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\t//subject is a HTML element of the column header\r\n\t\t\t\tlet match = this.columns.find((column) => {\r\n\t\t\t\t\treturn column.element === subject;\r\n\t\t\t\t});\r\n\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the field name of the column\r\n\t\t\treturn this.columnsByField[subject] || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetColumnByField(field){\r\n\t\treturn this.columnsByField[field];\r\n\t}\r\n\r\n\tgetColumnsByFieldRoot(root){\r\n\t\tvar matches = [];\r\n\r\n\t\tObject.keys(this.columnsByField).forEach((field) => {\r\n\t\t\tvar fieldRoot = field.split(\".\")[0];\r\n\t\t\tif(fieldRoot === root){\r\n\t\t\t\tmatches.push(this.columnsByField[field]);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn matches;\r\n\t}\r\n\r\n\tgetColumnByIndex(index){\r\n\t\treturn this.columnsByIndex[index];\r\n\t}\r\n\r\n\tgetFirstVisibleColumn(index){\r\n\t\tvar index = this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn col.visible;\r\n\t\t});\r\n\r\n\t\treturn index > -1 ? this.columnsByIndex[index] : false;\r\n\t}\r\n\r\n\tgetColumns(){\r\n\t\treturn this.columns;\r\n\t}\r\n\r\n\tfindColumnIndex(column){\r\n\t\treturn this.columnsByIndex.findIndex((col) => {\r\n\t\t\treturn column === col;\r\n\t\t});\r\n\t}\r\n\r\n\t//return all columns that are not groups\r\n\tgetRealColumns(){\r\n\t\treturn this.columnsByIndex;\r\n\t}\r\n\r\n\t//travers across columns and call action\r\n\ttraverse(callback){\r\n\t\tthis.columnsByIndex.forEach((column,i) =>{\r\n\t\t\tcallback(column, i);\r\n\t\t});\r\n\t}\r\n\r\n\t//get defintions of actual columns\r\n\tgetDefinitions(active){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(!active || (active && column.visible)){\r\n\t\t\t\toutput.push(column.getDefinition());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get full nested definition tree\r\n\tgetDefinitionTree(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.columns.forEach((column) => {\r\n\t\t\toutput.push(column.getDefinition(true));\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(structured){\r\n\t\tvar output = [],\r\n\t\tcolumns = structured ? this.columns : this.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\toutput.push(column.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetWidth(){\r\n\t\tvar width = 0;\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tif(column.visible){\r\n\t\t\t\twidth += column.getWidth();\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn width;\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tthis.moveColumnActual(from, to, after);\r\n\r\n\t\tto.element.parentNode.insertBefore(from.element, to.element);\r\n\r\n\t\tif(after){\r\n\t\t\tto.element.parentNode.insertBefore(to.element, from.element);\r\n\t\t}\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\r\n\t\tthis.table.rowManager.reinitialize();\r\n\t}\r\n\r\n\tmoveColumnActual(from, to, after){\r\n\t\tif(from.parent.isGroup){\r\n\t\t\tthis._moveColumnInArray(from.parent.columns, from, to, after);\r\n\t\t}else{\r\n\t\t\tthis._moveColumnInArray(this.columns, from, to, after);\r\n\t\t}\r\n\r\n\t\tthis._moveColumnInArray(this.columnsByIndex, from, to, after, true);\r\n\r\n\t\tthis.renderer.rerenderColumns(true);\r\n\r\n\t\tthis.dispatch(\"column-moved\", from, to, after);\r\n\r\n\t\tif(this.subscribedExternal(\"columnMoved\")){\r\n\t\t\tthis.dispatchExternal(\"columnMoved\", from.getComponent(), this.table.columnManager.getComponents());\r\n\t\t}\r\n\t}\r\n\r\n\t_moveColumnInArray(columns, from, to, after, updateRows){\r\n\t\tvar\tfromIndex = columns.indexOf(from),\r\n\t\ttoIndex, rows = [];\r\n\r\n\t\tif (fromIndex > -1) {\r\n\r\n\t\t\tcolumns.splice(fromIndex, 1);\r\n\r\n\t\t\ttoIndex = columns.indexOf(to);\r\n\r\n\t\t\tif (toIndex > -1) {\r\n\r\n\t\t\t\tif(after){\r\n\t\t\t\t\ttoIndex = toIndex+1;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\ttoIndex = fromIndex;\r\n\t\t\t}\r\n\r\n\t\t\tcolumns.splice(toIndex, 0, from);\r\n\r\n\t\t\tif(updateRows){\r\n\r\n\t\t\t\trows = this.chain(\"column-moving-rows\", [from, to, after], null, []) || [];\r\n\r\n\t\t\t\trows = rows.concat(this.table.rowManager.rows);\r\n\r\n\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\tif(row.cells.length){\r\n\t\t\t\t\t\tvar cell = row.cells.splice(fromIndex, 1)[0];\r\n\t\t\t\t\t\trow.cells.splice(toIndex, 0, cell);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToColumn(column, position, ifVisible){\r\n\t\tvar left = 0,\r\n\t\toffset = 0,\r\n\t\tadjust = 0,\r\n\t\tcolEl = column.getElement();\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof position === \"undefined\"){\r\n\t\t\t\tposition = this.table.options.scrollToColumnPosition;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ifVisible === \"undefined\"){\r\n\t\t\t\tifVisible = this.table.options.scrollToColumnIfVisible;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\t//align to correct position\r\n\t\t\t\tswitch(position){\r\n\t\t\t\t\tcase \"middle\":\r\n\t\t\t\t\tcase \"center\":\r\n\t\t\t\t\tadjust = -this.element.clientWidth / 2;\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"right\":\r\n\t\t\t\t\tadjust = colEl.clientWidth - this.headersElement.clientWidth;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//check column visibility\r\n\t\t\t\tif(!ifVisible){\r\n\r\n\t\t\t\t\toffset = colEl.offsetLeft;\r\n\r\n\t\t\t\t\tif(offset > 0 && offset + colEl.offsetWidth < this.element.clientWidth){\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//calculate scroll position\r\n\t\t\t\tleft = colEl.offsetLeft + adjust;\r\n\r\n\t\t\t\tleft = Math.max(Math.min(left, this.table.rowManager.element.scrollWidth - this.table.rowManager.element.clientWidth),0);\r\n\r\n\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\t\tresolve();\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - Column not visible\");\r\n\t\t\t\treject(\"Scroll Error - Column not visible\");\r\n\t\t\t}\r\n\r\n\t\t});\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tgenerateCells(row){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis.columnsByIndex.forEach((column) => {\r\n\t\t\tcells.push(column.generateCell(row));\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\t//////////////// Column Management /////////////////\r\n\tgetFlexBaseWidth(){\r\n\t\tvar totalWidth = this.table.element.clientWidth, //table element width\r\n\t\tfixedWidth = 0;\r\n\r\n\t\t//adjust for vertical scrollbar if present\r\n\t\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t\t}\r\n\r\n\t\tthis.columnsByIndex.forEach(function(column){\r\n\t\t\tvar width, minWidth, colWidth;\r\n\r\n\t\t\tif(column.visible){\r\n\r\n\t\t\t\twidth = column.definition.width || 0;\r\n\r\n\t\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\t\tif(typeof(width) == \"string\"){\r\n\t\t\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width) ;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolWidth = width;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn fixedWidth;\r\n\t}\r\n\r\n\taddColumn(definition, before, nextToColumn){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this._addColumn(definition, before, nextToColumn);\r\n\r\n\t\t\tthis._reIndexColumns();\r\n\r\n\t\t\tthis.dispatch(\"column-add\", definition, before, nextToColumn);\r\n\r\n\t\t\tif(this.layoutMode() != \"fitColumns\"){\r\n\t\t\t\tcolumn.reinitializeWidth();\r\n\t\t\t}\r\n\r\n\t\t\tthis.redraw(true);\r\n\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\r\n\t\t\tthis.renderer.rerenderColumns();\r\n\r\n\t\t\tresolve(column);\r\n\t\t});\r\n\t}\r\n\r\n\t//remove column from system\r\n\tderegisterColumn(column){\r\n\t\tvar field = column.getField(),\r\n\t\tindex;\r\n\r\n\t\t//remove from field list\r\n\t\tif(field){\r\n\t\t\tdelete this.columnsByField[field];\r\n\t\t}\r\n\r\n\t\t//remove from index list\r\n\t\tindex = this.columnsByIndex.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columnsByIndex.splice(index, 1);\r\n\t\t}\r\n\r\n\t\t//remove from column list\r\n\t\tindex = this.columns.indexOf(column);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.columns.splice(index, 1);\r\n\t\t}\r\n\r\n\t\tthis.verticalAlignHeaders();\r\n\r\n\t\tthis.redraw();\r\n\t}\r\n\r\n\t//redraw columns\r\n\tredraw(force){\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.verticalAlignHeaders();\r\n\t\t}\r\n\r\n\t\tif(force){\r\n\t\t\tthis.table.rowManager.resetScroll();\r\n\t\t\tthis.table.rowManager.reinitialize();\r\n\t\t}\r\n\r\n\t\tif(!this.confirm(\"table-redrawing\", force)){\r\n\t\t\tthis.layoutRefresh();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-redraw\", force);\r\n\r\n\t\tthis.table.footerManager.redraw();\r\n\t}\r\n}","//public row object\r\nexport default class RowComponent {\r\n\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\tgetIndex(){\r\n\t\treturn this._row.getData(\"data\")[this._row.table.options.index];\r\n\t}\r\n\r\n\tgetPosition(active){\r\n\t\treturn this._row.table.rowManager.getRowPosition(this._row, active);\r\n\t}\r\n\r\n\tdelete(){\r\n\t\treturn this._row.delete();\r\n\t}\r\n\r\n\tscrollTo(){\r\n\t\treturn this._row.table.rowManager.scrollToRow(this._row);\r\n\t}\r\n\r\n\tmove(to, after){\r\n\t\tthis._row.moveToRow(to, after);\r\n\t}\r\n\r\n\tupdate(data){\r\n\t\treturn this._row.updateData(data);\r\n\t}\r\n\r\n\tnormalizeHeight(){\r\n\t\tthis._row.normalizeHeight(true);\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n\r\n\treformat(){\r\n\t\treturn this._row.reinitialize();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetNextRow(){\r\n\t\tvar row = this._row.nextRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n\r\n\tgetPrevRow(){\r\n\t\tvar row = this._row.prevRow();\r\n\t\treturn row ? row.getComponent() : row;\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport RowComponent from './RowComponent.js';\r\nimport Helpers from '../tools/Helpers.js';\r\n\r\nexport default class Row extends CoreFeature{\r\n\tconstructor (data, parent, type = \"row\"){\r\n\t\tsuper(parent.table);\r\n\r\n\t\tthis.parent = parent;\r\n\t\tthis.data = {};\r\n\t\tthis.type = type; //type of element\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {}; //hold module variables;\r\n\t\tthis.cells = [];\r\n\t\tthis.height = 0; //hold element height\r\n\t\tthis.heightStyled = \"\"; //hold element height prestyled to improve render efficiency\r\n\t\tthis.manualHeight = false; //user has manually set row height\r\n\t\tthis.outerHeight = 0; //holde lements outer height\r\n\t\tthis.initialized = false; //element has been rendered\r\n\t\tthis.heightInitialized = false; //element has resized cells to fit\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.created = false;\r\n\r\n\t\tthis.setData(data);\r\n\t}\r\n\r\n\tcreate(){\r\n\t\tif(!this.created){\r\n\t\t\tthis.created = true;\r\n\t\t\tthis.generateElement();\r\n\t\t}\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.setAttribute(\"role\", \"row\");\r\n\r\n\t\tthis.element = el;\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\tthis.create();\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.createElement();\r\n\t\tthis.dispatch(\"row-init\", this);\r\n\t}\r\n\r\n\tgenerateCells(){\r\n\t\tthis.cells = this.table.columnManager.generateCells(this);\r\n\t}\r\n\r\n\t//functions to setup on first render\r\n\tinitialize(force){\r\n\t\tthis.create();\r\n\r\n\t\tif(!this.initialized || force){\r\n\r\n\t\t\tthis.deleteCells();\r\n\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tthis.dispatch(\"row-layout-before\", this);\r\n\r\n\t\t\tthis.generateCells();\r\n\r\n\t\t\tthis.table.columnManager.renderer.renderRowCells(this);\r\n\r\n\t\t\tif(force){\r\n\t\t\t\tthis.normalizeHeight();\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout\", this);\r\n\r\n\t\t\tthis.initialized = true;\r\n\r\n\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-layout-after\", this);\r\n\t\t}else{\r\n\t\t\tthis.table.columnManager.renderer.rerenderRowCells(this);\r\n\t\t}\r\n\t}\r\n\r\n\treinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\tdeinitializeHeight(){\r\n\t\tthis.heightInitialized = false;\r\n\t}\r\n\r\n\treinitialize(children){\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\r\n\t\tif(!this.manualHeight){\r\n\t\t\tthis.height = 0;\r\n\t\t\tthis.heightStyled = \"\";\r\n\t\t}\r\n\r\n\t\tif(this.element && this.element.offsetParent !== null){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"row-relayout\", this);\r\n\t}\r\n\r\n\t//get heights when doing bulk row style calcs in virtual DOM\r\n\tcalcHeight(force){\r\n\r\n\t\tvar maxHeight = 0,\r\n\t\tminHeight = this.table.options.resizableRows ? this.element.clientHeight : 0;\r\n\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tvar height = cell.getHeight();\r\n\t\t\tif(height > maxHeight){\r\n\t\t\t\tmaxHeight = height;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.height = Math.max(maxHeight, minHeight);\r\n\t\t}else{\r\n\t\t\tthis.height = this.manualHeight ? this.height : Math.max(maxHeight, minHeight);\r\n\t\t}\r\n\r\n\t\tthis.heightStyled = this.height ? this.height + \"px\" : \"\";\r\n\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t}\r\n\r\n\t//set of cells\r\n\tsetCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.setHeight();\r\n\t\t});\r\n\r\n\t\tthis.heightInitialized = true;\r\n\t}\r\n\r\n\tclearCellHeight(){\r\n\t\tthis.cells.forEach(function(cell){\r\n\t\t\tcell.clearHeight();\r\n\t\t});\r\n\t}\r\n\r\n\t//normalize the height of elements in the row\r\n\tnormalizeHeight(force){\r\n\t\tif(force){\r\n\t\t\tthis.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis.calcHeight(force);\r\n\r\n\t\tthis.setCellHeight();\r\n\t}\r\n\r\n\t//set height of rows\r\n\tsetHeight(height, force){\r\n\t\tif(this.height != height || force){\r\n\r\n\t\t\tthis.manualHeight = true;\r\n\r\n\t\t\tthis.height = height;\r\n\t\t\tthis.heightStyled = height ? height + \"px\" : \"\";\r\n\r\n\t\t\tthis.setCellHeight();\r\n\r\n\t\t\t// this.outerHeight = this.element.outerHeight();\r\n\t\t\tthis.outerHeight = this.element.offsetHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\t//return rows outer Width\r\n\tgetWidth(){\r\n\t\treturn this.element.offsetWidth;\r\n\t}\r\n\r\n\t//////////////// Cell Management /////////////////\r\n\tdeleteCell(cell){\r\n\t\tvar index = this.cells.indexOf(cell);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.cells.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\t//////////////// Data Management /////////////////\r\n\tsetData(data){\r\n\t\tthis.data = this.chain(\"row-data-init-before\", [this, data], undefined, data);\r\n\r\n\t\tthis.dispatch(\"row-data-init-after\", this);\r\n\t}\r\n\r\n\t//update the rows data\r\n\tupdateData(updatedData){\r\n\t\tvar visible = this.element && Helpers.elVisible(this.element),\r\n\t\ttempData = {},\r\n\t\tnewRowData;\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\r\n\t\t\tif(typeof updatedData === \"string\"){\r\n\t\t\t\tupdatedData = JSON.parse(updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-before\", this);\r\n\r\n\t\t\tif(this.subscribed(\"row-data-changing\")){\r\n\t\t\t\ttempData = Object.assign(tempData, this.data);\r\n\t\t\t\ttempData = Object.assign(tempData, updatedData);\r\n\t\t\t}\r\n\r\n\t\t\tnewRowData = this.chain(\"row-data-changing\", [this, tempData, updatedData], null, updatedData);\r\n\r\n\t\t\t//set data\r\n\t\t\tfor (var attrname in newRowData) {\r\n\t\t\t\tthis.data[attrname] = newRowData[attrname];\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-save-after\", this);\r\n\r\n\t\t\t//update affected cells only\r\n\t\t\tfor (var attrname in updatedData) {\r\n\r\n\t\t\t\tlet columns = this.table.columnManager.getColumnsByFieldRoot(attrname);\r\n\r\n\t\t\t\tcolumns.forEach((column) => {\r\n\t\t\t\t\tlet cell = this.getCell(column.getField());\r\n\r\n\t\t\t\t\tif(cell){\r\n\t\t\t\t\t\tlet value = column.getFieldValue(newRowData);\r\n\t\t\t\t\t\tif(cell.getValue() != value){\r\n\t\t\t\t\t\t\tcell.setValueProcessData(value);\r\n\r\n\t\t\t\t\t\t\tif(visible){\r\n\t\t\t\t\t\t\t\tcell.cellRendered();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\t//Partial reinitialization if visible\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.normalizeHeight(true);\r\n\r\n\t\t\t\tif(this.table.options.rowFormatter){\r\n\t\t\t\t\tthis.table.options.rowFormatter(this.getComponent());\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.initialized = false;\r\n\t\t\t\tthis.height = 0;\r\n\t\t\t\tthis.heightStyled = \"\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"row-data-changed\", this, visible, updatedData);\r\n\r\n\t\t\t//this.reinitialize();\r\n\r\n\t\t\tthis.dispatchExternal(\"rowUpdated\", this.getComponent());\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\tif(transform){\r\n\t\t\treturn this.chain(\"row-data-retrieve\", [this, transform], null, this.data);\r\n\t\t}\r\n\r\n\t\treturn this.data;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar match = false;\r\n\r\n\t\tcolumn = this.table.columnManager.findColumn(column);\r\n\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\r\n\t\tmatch = this.cells.find(function(cell){\r\n\t\t\treturn cell.column === column;\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetCellIndex(findCell){\r\n\t\treturn this.cells.findIndex(function(cell){\r\n\t\t\treturn cell === findCell;\r\n\t\t});\r\n\t}\r\n\r\n\tfindCell(subject){\r\n\t\treturn this.cells.find((cell) => {\r\n\t\t\treturn cell.element === subject;\r\n\t\t});\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.generateCells();\r\n\t\t}\r\n\r\n\t\treturn this.cells;\r\n\t}\r\n\r\n\tnextRow(){\r\n\t\tvar row = this.table.rowManager.nextDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tprevRow(){\r\n\t\tvar row = this.table.rowManager.prevDisplayRow(this, true);\r\n\t\treturn row || false;\r\n\t}\r\n\r\n\tmoveToRow(to, before){\r\n\t\tvar toRow = this.table.rowManager.findRow(to);\r\n\r\n\t\tif(toRow){\r\n\t\t\tthis.table.rowManager.moveRowActual(this, toRow, !before);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"display\", false, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", to);\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////// Actions /////////////////////\r\n\tdelete(){\r\n\t\tthis.dispatch(\"row-delete\", this);\r\n\r\n\t\tthis.deleteActual();\r\n\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\tdeleteActual(blockRedraw){\r\n\t\tvar index = this.table.rowManager.getRowIndex(this);\r\n\r\n\t\tthis.detatchModules();\r\n\r\n\t\tthis.table.rowManager.deleteRow(this, blockRedraw);\r\n\r\n\t\tthis.deleteCells();\r\n\r\n\t\tthis.initialized = false;\r\n\t\tthis.heightInitialized = false;\r\n\t\tthis.element = false;\r\n\r\n\t\tthis.dispatch(\"row-deleted\", this);\r\n\t}\r\n\r\n\tdetatchModules(){\r\n\t\tthis.dispatch(\"row-deleting\", this);\r\n\t}\r\n\r\n\tdeleteCells(){\r\n\t\tvar cellCount = this.cells.length;\r\n\r\n\t\tfor(let i = 0; i < cellCount; i++){\r\n\t\t\tthis.cells[0].delete();\r\n\t\t}\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.detatchModules();\r\n\t\tthis.deleteCells();\r\n\r\n\t\tif(this.element){\r\n\t\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\r\n\t\t\tif(this.element.parentNode){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.modules = {};\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this.modules.group || false;\r\n\t}\r\n\r\n\t//////////////// Object Generation /////////////////\r\n\tgetComponent(){\r\n\t\tif(!this.component){\r\n\t\t\tthis.component = new RowComponent(this);\r\n\t\t}\r\n\r\n\t\treturn this.component;\r\n\t}\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class BaiscVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\t}\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.scrollTop = 0;\r\n\t\telement.scrollLeft = 0;\r\n\r\n\t\telement.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tvar element = this.tableElement,\r\n\t\tonlyGroupHeaders = true;\r\n\r\n\t\tthis.rows().forEach((row, index) => {\r\n\t\t\tthis.styleRow(row, index);\r\n\t\t\telement.appendChild(row.getElement());\r\n\t\t\trow.initialize(true);\r\n\r\n\t\t\tif(row.type !== \"group\"){\r\n\t\t\t\tonlyGroupHeaders = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(onlyGroupHeaders){\r\n\t\t\telement.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}else{\r\n\t\t\telement.style.minWidth = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trerenderRows(callback){\r\n\t\tthis.clearRows();\r\n\t\tthis.renderRows();\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowTop = Helpers.elOffset(row.getElement()).top;\r\n\r\n\t\treturn !(Math.abs(this.elementVertical.scrollTop - rowTop) > Math.abs(this.elementVertical.scrollTop + this.elementVertical.clientHeight - rowTop));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\tthis.elementVertical.scrollTop = Helpers.elOffset(rowEl).top - Helpers.elOffset(this.elementVertical).top + this.elementVertical.scrollTop;\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\treturn this.rows();\r\n\t}\r\n\r\n}","import Renderer from '../Renderer.js';\r\nimport Helpers from '../../tools/Helpers.js';\r\n\r\nexport default class VirtualDomVertical extends Renderer{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.verticalFillMode = \"fill\";\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomRowHeight = 20; //approximation of row heights for padding\r\n\r\n\t\tthis.vDomTop = 0; //hold position for first rendered row in the virtual DOM\r\n\t\tthis.vDomBottom = 0; //hold possition for last rendered row in the virtual DOM\r\n\r\n\t\tthis.vDomScrollPosTop = 0; //last scroll position of the vDom top;\r\n\t\tthis.vDomScrollPosBottom = 0; //last scroll position of the vDom bottom;\r\n\r\n\t\tthis.vDomTopPad = 0; //hold value of padding for top of virtual DOM\r\n\t\tthis.vDomBottomPad = 0; //hold value of padding for bottom of virtual DOM\r\n\r\n\t\tthis.vDomMaxRenderChain = 90; //the maximum number of dom elements that can be rendered in 1 go\r\n\r\n\t\tthis.vDomWindowBuffer = 0; //window row buffer before removing elements, to smooth scrolling\r\n\r\n\t\tthis.vDomWindowMinTotalRows = 20; //minimum number of rows to be generated in virtual dom (prevent buffering issues on tables with tall rows)\r\n\t\tthis.vDomWindowMinMarginRows = 5; //minimum number of rows to be generated in virtual dom margin\r\n\r\n\t\tthis.vDomTopNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t\tthis.vDomBottomNewRows = []; //rows to normalize after appending to optimize render speed\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t///////// Public Functions ///////////\r\n\t//////////////////////////////////////\r\n\r\n\tclearRows(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\t// element.children.detach();\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\telement.style.paddingTop = \"\";\r\n\t\telement.style.paddingBottom = \"\";\r\n\t\t// element.style.minWidth = \"\";\r\n\t\telement.style.minHeight = \"\";\r\n\t\telement.style.display = \"\";\r\n\t\telement.style.visibility = \"\";\r\n\r\n\t\tthis.elementVertical.scrollTop = 0;\r\n\t\tthis.elementVertical.scrollLeft = 0;\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.vDomTop = 0;\r\n\t\tthis.vDomBottom = 0;\r\n\t\tthis.vDomTopPad = 0;\r\n\t\tthis.vDomBottomPad = 0;\r\n\t\tthis.vDomScrollPosTop = 0;\r\n\t\tthis.vDomScrollPosBottom = 0;\r\n\t}\r\n\r\n\trenderRows(){\r\n\t\tthis._virtualRenderFill();\r\n\t}\r\n\r\n\trerenderRows(callback){\r\n\t\tvar scrollTop = this.elementVertical.scrollTop;\r\n\t\tvar topRow = false;\r\n\t\tvar topOffset = false;\r\n\r\n\t\tvar left = this.table.rowManager.scrollLeft;\r\n\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\r\n\t\t\tif(rows[i]){\r\n\t\t\t\tvar diff = scrollTop - rows[i].getElement().offsetTop;\r\n\r\n\t\t\t\tif(topOffset === false || Math.abs(diff) < topOffset){\r\n\t\t\t\t\ttopOffset = diff;\r\n\t\t\t\t\ttopRow = i;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows.forEach((row) => {\r\n\t\t\trow.deinitializeHeight();\r\n\t\t});\r\n\r\n\t\tif(callback){\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tthis._virtualRenderFill((topRow === false ? this.rows.length - 1 : topRow), true, topOffset || 0);\r\n\r\n\t\tthis.scrollColumns(left);\r\n\t}\r\n\r\n\tscrollColumns(left){\r\n\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t}\r\n\r\n\tscrollRows(top, dir){\r\n\t\tvar topDiff = top - this.vDomScrollPosTop;\r\n\t\tvar bottomDiff = top - this.vDomScrollPosBottom;\r\n\t\tvar margin = this.vDomWindowBuffer * 2;\r\n\t\tvar rows = this.rows();\r\n\r\n\t\tthis.scrollTop = top;\r\n\r\n\t\tif(-topDiff > margin || bottomDiff > margin){\r\n\t\t\t//if big scroll redraw table;\r\n\t\t\tvar left = this.table.rowManager.scrollLeft;\r\n\t\t\tthis._virtualRenderFill(Math.floor((this.elementVertical.scrollTop / this.elementVertical.scrollHeight) * rows.length));\r\n\t\t\tthis.scrollColumns(left);\r\n\t\t}else{\r\n\r\n\t\t\tif(dir){\r\n\t\t\t\t//scrolling up\r\n\t\t\t\tif(topDiff < 0){\r\n\t\t\t\t\tthis._addTopRow(rows, -topDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(bottomDiff < 0){\r\n\t\t\t\t\t//hide bottom row if needed\r\n\t\t\t\t\tif(this.vDomScrollHeight - this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeBottomRow(rows, -bottomDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(bottomDiff >= 0){\r\n\t\t\t\t\tthis._addBottomRow(rows, bottomDiff);\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//scrolling down\r\n\t\t\t\tif(topDiff >= 0){\r\n\t\t\t\t\t//hide top row if needed\r\n\t\t\t\t\tif(this.scrollTop > this.vDomWindowBuffer){\r\n\t\t\t\t\t\tthis._removeTopRow(rows, topDiff);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tresize(){\r\n\t\tthis.vDomWindowBuffer = this.table.options.renderVerticalBuffer || this.elementVertical.clientHeight;\r\n\t}\r\n\r\n\tscrollToRowNearestTop(row){\r\n\t\tvar rowIndex = this.rows().indexOf(row);\r\n\r\n\t\treturn !(Math.abs(this.vDomTop - rowIndex) > Math.abs(this.vDomBottom - rowIndex));\r\n\t}\r\n\r\n\tscrollToRow(row){\r\n\t\tvar index = this.rows().indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis._virtualRenderFill(index, true);\r\n\t\t}\r\n\t}\r\n\r\n\tvisibleRows(includingBuffer){\r\n\t\tvar topEdge = this.elementVertical.scrollTop,\r\n\t\tbottomEdge = this.elementVertical.clientHeight + topEdge,\r\n\t\ttopFound = false,\r\n\t\ttopRow = 0,\r\n\t\tbottomRow = 0,\r\n\t\trows = this.rows();\r\n\r\n\t\tif(includingBuffer){\r\n\t\t\ttopRow = this.vDomTop;\r\n\t\t\tbottomRow = this.vDomBottom;\r\n\t\t}else{\r\n\t\t\tfor(var i = this.vDomTop; i <= this.vDomBottom; i++){\r\n\t\t\t\tif(rows[i]){\r\n\t\t\t\t\tif(!topFound){\r\n\t\t\t\t\t\tif((topEdge - rows[i].getElement().offsetTop) >= 0){\r\n\t\t\t\t\t\t\ttopRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\ttopFound = true;\r\n\r\n\t\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(bottomEdge - rows[i].getElement().offsetTop >= 0){\r\n\t\t\t\t\t\t\tbottomRow = i;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn rows.slice(topRow, bottomRow + 1);\r\n\t}\r\n\r\n\t//////////////////////////////////////\r\n\t//////// Internal Rendering //////////\r\n\t//////////////////////////////////////\r\n\r\n\t//full virtual render\r\n\t_virtualRenderFill(position, forceMove, offset){\r\n\t\tvar\telement = this.tableElement,\r\n\t\tholder = this.elementVertical,\r\n\t\ttopPad = 0,\r\n\t\trowsHeight = 0,\r\n\t\theightOccupied = 0,\r\n\t\ttopPadHeight = 0,\r\n\t\ti = 0,\r\n\t\trows = this.rows(),\r\n\t\trowsCount = rows.length,\r\n\t\tcontainerHeight = this.elementVertical.clientHeight;\r\n\r\n\t\tposition = position || 0;\r\n\r\n\t\toffset = offset || 0;\r\n\r\n\t\tif(!position){\r\n\t\t\tthis.clear();\r\n\t\t}else{\r\n\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t\t//check if position is too close to bottom of table\r\n\t\t\theightOccupied = (rowsCount - position + 1) * this.vDomRowHeight;\r\n\r\n\t\t\tif(heightOccupied < containerHeight){\r\n\t\t\t\tposition -= Math.ceil((containerHeight - heightOccupied) / this.vDomRowHeight);\r\n\t\t\t\tif(position < 0){\r\n\t\t\t\t\tposition = 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//calculate initial pad\r\n\t\t\ttopPad = Math.min(Math.max(Math.floor(this.vDomWindowBuffer / this.vDomRowHeight), this.vDomWindowMinMarginRows), position);\r\n\t\t\tposition -= topPad;\r\n\t\t}\r\n\r\n\t\tif(rowsCount && Helpers.elVisible(this.elementVertical)){\r\n\t\t\tthis.vDomTop = position;\r\n\r\n\t\t\tthis.vDomBottom = position -1;\r\n\r\n\t\t\twhile ((rowsHeight <= containerHeight + this.vDomWindowBuffer || i < this.vDomWindowMinTotalRows) && this.vDomBottom < rowsCount -1){\r\n\t\t\t\tvar index = this.vDomBottom + 1,\r\n\t\t\t\trow = rows[index],\r\n\t\t\t\trowHeight = 0;\r\n\r\n\t\t\t\tthis.styleRow(row, index);\r\n\r\n\t\t\t\telement.appendChild(row.getElement());\r\n\r\n\t\t\t\trow.initialize();\r\n\r\n\t\t\t\tif(!row.heightInitialized){\r\n\t\t\t\t\trow.normalizeHeight(true);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowHeight = row.getHeight();\r\n\r\n\t\t\t\tif(i < topPad){\r\n\t\t\t\t\ttopPadHeight += rowHeight;\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowsHeight += rowHeight;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.vDomBottom ++;\r\n\t\t\t\ti++;\r\n\t\t\t}\r\n\r\n\t\t\tif(!position){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t\t//adjust rowheight to match average of rendered elements\r\n\t\t\t\tthis.vDomRowHeight = Math.floor((rowsHeight + topPadHeight) / i);\r\n\t\t\t\tthis.vDomBottomPad = this.vDomRowHeight * (rowsCount - this.vDomBottom -1);\r\n\r\n\t\t\t\tthis.vDomScrollHeight = topPadHeight + rowsHeight + this.vDomBottomPad - containerHeight;\r\n\t\t\t}else{\r\n\t\t\t\tthis.vDomTopPad = !forceMove ? this.scrollTop - topPadHeight : (this.vDomRowHeight * this.vDomTop) + offset;\r\n\t\t\t\tthis.vDomBottomPad = this.vDomBottom == rowsCount-1 ? 0 : Math.max(this.vDomScrollHeight - this.vDomTopPad - rowsHeight - topPadHeight, 0);\r\n\t\t\t}\r\n\r\n\t\t\telement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\telement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\r\n\t\t\tif(forceMove){\r\n\t\t\t\tthis.scrollTop = this.vDomTopPad + (topPadHeight) + offset - (this.elementVertical.scrollWidth > this.elementVertical.clientWidth ? this.elementVertical.offsetHeight - containerHeight : 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.scrollTop = Math.min(this.scrollTop, this.elementVertical.scrollHeight - containerHeight);\r\n\r\n\t\t\t//adjust for horizontal scrollbar if present (and not at top of table)\r\n\t\t\tif(this.elementVertical.scrollWidth > this.elementVertical.offsetWidth && forceMove){\r\n\t\t\t\tthis.scrollTop += this.elementVertical.offsetHeight - containerHeight;\r\n\t\t\t}\r\n\r\n\t\t\tthis.vDomScrollPosTop = this.scrollTop;\r\n\t\t\tthis.vDomScrollPosBottom = this.scrollTop;\r\n\r\n\t\t\tholder.scrollTop = this.scrollTop;\r\n\r\n\t\t\tthis.dispatch(\"render-virtual-fill\");\r\n\t\t}\r\n\t}\r\n\r\n\t_addTopRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomTop -1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tif(this.vDomTop){\r\n\t\t\t\tlet row = rows[index],\r\n\t\t\t\trowHeight, initialized;\r\n\r\n\t\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\t\ttable.insertBefore(row.getElement(), table.firstChild);\r\n\r\n\t\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\t\tthis.vDomTop--;\r\n\t\t\t\t\t\tindex--;\r\n\t\t\t\t\t\ti++;\r\n\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomTopPad < 0){\r\n\t\t\t\tthis.vDomTopPad = index * this.vDomRowHeight;\r\n\t\t\t}\r\n\r\n\t\t\tif(index < 1){\r\n\t\t\t\tthis.vDomTopPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeTopRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomTop],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomTop++;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomTopPad += paddingAdjust;\r\n\t\t\tthis.tableElement.style.paddingTop = this.vDomTopPad + \"px\";\r\n\t\t\tthis.vDomScrollPosTop += this.vDomTop ? paddingAdjust : paddingAdjust + this.vDomWindowBuffer;\r\n\t\t}\r\n\t}\r\n\r\n\t_addBottomRow(rows, fillableSpace){\r\n\t\tvar table = this.tableElement,\r\n\t\taddedRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\tindex = this.vDomBottom + 1,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[index],\r\n\t\t\trowHeight, initialized;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\t\t\t\tinitialized = row.initialized;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\r\n\t\t\t\t\tthis.styleRow(row, index);\r\n\t\t\t\t\ttable.appendChild(row.getElement());\r\n\r\n\t\t\t\t\tif(!row.initialized || !row.heightInitialized){\r\n\t\t\t\t\t\taddedRows.push(row);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\trow.initialize();\r\n\r\n\t\t\t\t\tif(!initialized){\r\n\t\t\t\t\t\trowHeight = row.getElement().offsetHeight;\r\n\r\n\t\t\t\t\t\tif(rowHeight > this.vDomWindowBuffer){\r\n\t\t\t\t\t\t\tthis.vDomWindowBuffer = rowHeight * 2;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tthis.vDomBottom++;\r\n\t\t\t\t\tindex++;\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of addedRows){\r\n\t\t\trow.clearCellHeight();\r\n\t\t}\r\n\r\n\t\tthis._quickNormalizeRowHeight(addedRows);\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad -= paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0 || index == rows.length -1){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\ttable.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom += paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_removeBottomRow(rows, fillableSpace){\r\n\t\tvar removableRows = [],\r\n\t\tpaddingAdjust = 0,\r\n\t\ti = 0;\r\n\r\n\t\twhile(true){\r\n\t\t\tlet row = rows[this.vDomBottom],\r\n\t\t\trowHeight, diff;\r\n\r\n\t\t\tif(row && i < this.vDomMaxRenderChain){\r\n\t\t\t\trowHeight = row.getHeight() || this.vDomRowHeight;\r\n\r\n\t\t\t\tif(fillableSpace >= rowHeight){\r\n\t\t\t\t\tthis.vDomBottom --;\r\n\r\n\t\t\t\t\tfillableSpace -= rowHeight;\r\n\t\t\t\t\tpaddingAdjust += rowHeight;\r\n\r\n\t\t\t\t\tremovableRows.push(row);\r\n\t\t\t\t\ti++;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfor (let row of removableRows){\r\n\t\t\tlet rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(paddingAdjust){\r\n\t\t\tthis.vDomBottomPad += paddingAdjust;\r\n\r\n\t\t\tif(this.vDomBottomPad < 0){\r\n\t\t\t\tthis.vDomBottomPad = 0;\r\n\t\t\t}\r\n\r\n\t\t\tthis.tableElement.style.paddingBottom = this.vDomBottomPad + \"px\";\r\n\t\t\tthis.vDomScrollPosBottom -= paddingAdjust;\r\n\t\t}\r\n\t}\r\n\r\n\t_quickNormalizeRowHeight(rows){\r\n\t\tfor(let row of rows){\r\n\t\t\trow.calcHeight();\r\n\t\t}\r\n\r\n\t\tfor(let row of rows){\r\n\t\t\trow.setCellHeight();\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from './CoreFeature.js';\r\nimport Row from './row/Row.js';\r\nimport RowComponent from './row/RowComponent.js';\r\nimport Helpers from './tools/Helpers.js';\r\n\r\nimport RendererBasicVertical from './rendering/renderers/BasicVertical.js';\r\nimport RendererVirtualDomVertical from './rendering/renderers/VirtualDomVertical.js';\r\n\r\nexport default class RowManager extends CoreFeature{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\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\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\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\r\n\t\tthis.displayRows = []; //rows currently on display in the table\r\n\t\tthis.displayRowsCount = 0; //count of display rows\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.rowNumColumn = false; //hold column component for row number column\r\n\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\r\n\t\tthis.dataPipeline = []; //hold data pipeline tasks\r\n\t\tthis.displayPipeline = []; //hold data display pipeline tasks\r\n\r\n\t\tthis.renderer = null;\r\n\t}\r\n\r\n\t//////////////// Setup Functions /////////////////\r\n\r\n\tcreateHolderElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-tableholder\");\r\n\t\tel.setAttribute(\"tabindex\", 0);\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateTableElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-table\");\r\n\t\tel.setAttribute(\"role\", \"rowgroup\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\t//return containing element\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\t//return table element\r\n\tgetTableElement(){\r\n\t\treturn this.tableElement;\r\n\t}\r\n\r\n\t//return position of row in table\r\n\tgetRowPosition(row, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows.indexOf(row);\r\n\t\t}else{\r\n\t\t\treturn this.rows.indexOf(row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeRenderer();\r\n\r\n\t\t//initialize manager\r\n\t\tthis.element.appendChild(this.tableElement);\r\n\r\n\t\tthis.firstRender = true;\r\n\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\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\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}\r\n\r\n\t\t\t//handle verical scrolling\r\n\t\t\tif(this.scrollTop != top){\r\n\t\t\t\tthis.scrollTop = top;\r\n\r\n\t\t\t\tthis.renderer.scrollRows(top, topDir);\r\n\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\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\r\n\t\t\t\treturn match || false;\r\n\t\t\t}\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tlet match = this.rows.find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\r\n\t\t\treturn match || false;\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\t\treturn false;\r\n\t}\r\n\r\n\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\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\tgetRowFromPosition(position, active){\r\n\t\tif(active){\r\n\t\t\treturn this.activeRows[position];\r\n\t\t}else{\r\n\t\t\treturn this.rows[position];\r\n\t\t}\r\n\t}\r\n\r\n\tscrollToRow(row, position, ifVisible){\r\n\t\treturn this.renderer.scrollToRowPosition(row, position, ifVisible);\r\n\t}\r\n\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\r\n\t\t\t\tthis._setDataActual(data);\r\n\t\t\t}\r\n\r\n\t\t\tresolve();\r\n\t\t});\r\n\t}\r\n\r\n\t_setDataActual(data, renderInPosition){\r\n\t\tthis.dispatchExternal(\"dataProcessing\", data);\r\n\r\n\t\tthis._wipeElements();\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tthis.dispatch(\"data-processing\", data);\r\n\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\r\n\t\t\tthis.refreshActiveData(false, false, renderInPosition);\r\n\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\r\n\t_wipeElements(){\r\n\t\tthis.dispatch(\"rows-wipe\");\r\n\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rows = [];\r\n\t\tthis.activeRows = [];\r\n\t\tthis.activeRowsPipeline = [];\r\n\t\tthis.activeRowsCount = 0;\r\n\t\tthis.displayRows = [];\r\n\t\tthis.displayRowsCount = 0;\r\n\r\n\t\tthis.adjustTableSize();\r\n\t}\r\n\r\n\tdeleteRow(row, blockRedraw){\r\n\t\tvar allIndex = this.rows.indexOf(row),\r\n\t\tactiveIndex = this.activeRows.indexOf(row);\r\n\r\n\t\tif(activeIndex > -1){\r\n\t\t\tthis.activeRows.splice(activeIndex, 1);\r\n\t\t}\r\n\r\n\t\tif(allIndex > -1){\r\n\t\t\tthis.rows.splice(allIndex, 1);\r\n\t\t}\r\n\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tvar displayIndex = rows.indexOf(row);\r\n\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\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatchExternal(\"rowDeleted\", row.getComponent());\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\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\r\n\taddRow(data, pos, index, blockRedraw){\r\n\t\tvar row = this.addRowActual(data, pos, index, blockRedraw);\r\n\r\n\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//add multiple rows\r\n\taddRows(data, pos, index){\r\n\t\tvar length = 0,\r\n\t\trows = [];\r\n\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tpos = this.findAddRowPos(pos);\r\n\r\n\t\t\tif(!Array.isArray(data)){\r\n\t\t\t\tdata = [data];\r\n\t\t\t}\r\n\r\n\t\t\tlength = data.length - 1;\r\n\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\r\n\t\t\tdata.forEach((item, i) => {\r\n\t\t\t\tvar row = this.addRow(item, pos, index, true);\r\n\t\t\t\trows.push(row);\r\n\t\t\t\tthis.dispatch(\"row-added\", row, data, pos, index);\r\n\t\t\t});\r\n\r\n\t\t\tthis.refreshActiveData(false, false, true);\r\n\r\n\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\tif(rows.length){\r\n\t\t\t\tthis._clearPlaceholder();\r\n\t\t\t}\r\n\r\n\t\t\tresolve(rows);\r\n\t\t});\r\n\t}\r\n\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\r\n\t\tif(pos === \"pos\"){\r\n\t\t\tpos = true;\r\n\t\t}\r\n\r\n\t\tif(pos === \"bottom\"){\r\n\t\t\tpos = false;\r\n\t\t}\r\n\r\n\t\treturn pos;\r\n\t}\r\n\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\r\n\t\tif(!index){\r\n\t\t\tchainResult = this.chain(\"row-adding-position\", [row, top], null, {index, top});\r\n\r\n\t\t\tindex = chainResult.index;\r\n\t\t\ttop = chainResult.top;\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tindex = this.findRow(index);\r\n\t\t}\r\n\r\n\t\tindex = this.chain(\"row-adding-index\", [row, index, top], null, index);\r\n\r\n\t\tif(index){\r\n\t\t\tallIndex = this.rows.indexOf(index);\r\n\t\t}\r\n\r\n\t\tif(index && allIndex > -1){\r\n\t\t\tactiveIndex = this.activeRows.indexOf(index);\r\n\r\n\t\t\tthis.displayRowIterator(function(rows){\r\n\t\t\t\tvar displayIndex = rows.indexOf(index);\r\n\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\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\r\n\t\t\tthis.rows.splice((top ? allIndex : allIndex + 1), 0, row);\r\n\r\n\t\t}else{\r\n\r\n\t\t\tif(top){\r\n\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\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\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\r\n\t\tthis.setActiveRows(this.activeRows);\r\n\r\n\t\tthis.dispatchExternal(\"rowAdded\", row.getComponent());\r\n\r\n\t\tif(this.subscribedExternal(\"dataChanged\")){\r\n\t\t\tthis.dispatchExternal(\"dataChanged\", this.table.rowManager.getData());\r\n\t\t}\r\n\r\n\t\tif(!blockRedraw){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t}\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tthis.dispatch(\"row-move\", from, to, after);\r\n\r\n\t\tthis.moveRowActual(from, to, after);\r\n\r\n\t\tthis.regenerateRowNumbers();\r\n\r\n\t\tthis.dispatch(\"row-moved\", from, to, after);\r\n\t\tthis.dispatchExternal(\"rowMoved\", from.getComponent());\r\n\t}\r\n\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\r\n\t\tthis.displayRowIterator((rows) => {\r\n\t\t\tthis.moveRowInArray(rows, from, to, after);\r\n\t\t});\r\n\r\n\t\tthis.dispatch(\"row-moving\", from, to, after);\r\n\t}\r\n\r\n\tmoveRowInArray(rows, from, to, after){\r\n\t\tvar\tfromIndex, toIndex, start, end;\r\n\r\n\t\tif(from !== to){\r\n\r\n\t\t\tfromIndex = rows.indexOf(from);\r\n\r\n\t\t\tif (fromIndex > -1) {\r\n\r\n\t\t\t\trows.splice(fromIndex, 1);\r\n\r\n\t\t\t\ttoIndex = rows.indexOf(to);\r\n\r\n\t\t\t\tif (toIndex > -1) {\r\n\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\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\r\n\t\t\t//restyle rows\r\n\t\t\tif(rows === this.getDisplayRows()){\r\n\r\n\t\t\t\tstart = fromIndex < toIndex ? fromIndex : toIndex;\r\n\t\t\t\tend = toIndex > fromIndex ? toIndex : fromIndex +1;\r\n\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\r\n\tclearData(){\r\n\t\tthis.setData([]);\r\n\t}\r\n\r\n\tgetRowIndex(row){\r\n\t\treturn this.findRowIndex(row, this.rows);\r\n\t}\r\n\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\r\n\tnextDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tnextRow = false;\r\n\r\n\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\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\r\n\t\treturn nextRow;\r\n\t}\r\n\r\n\tprevDisplayRow(row, rowOnly){\r\n\t\tvar index = this.getDisplayRowIndex(row),\r\n\t\tprevRow = false;\r\n\r\n\t\tif(index){\r\n\t\t\tprevRow = this.getDisplayRows()[index-1];\r\n\t\t}\r\n\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\r\n\t\treturn prevRow;\r\n\t}\r\n\r\n\tfindRowIndex(row, list){\r\n\t\tvar rowIndex;\r\n\r\n\t\trow = this.findRow(row);\r\n\r\n\t\tif(row){\r\n\t\t\trowIndex = list.indexOf(row);\r\n\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\r\n\t\treturn false;\r\n\t}\r\n\r\n\tgetData(active, transform){\r\n\t\tvar output = [],\r\n\t\trows = this.getRows(active);\r\n\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\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetComponents(active){\r\n\t\tvar\toutput = [],\r\n\t\trows = this.getRows(active);\r\n\r\n\t\trows.forEach(function(row){\r\n\t\t\toutput.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetDataCount(active){\r\n\t\tvar rows = this.getRows(active);\r\n\r\n\t\treturn rows.length;\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tthis.scrollLeft = left;\r\n\t\tthis.element.scrollLeft = left;\r\n\r\n\t\tthis.dispatch(\"scroll-horizontal\", left);\r\n\t}\r\n\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\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\r\n\t//set active data set\r\n\trefreshActiveData(handler, skipStage, renderInPosition){\r\n\t\tvar table = this.table,\r\n\t\tstage = \"\",\r\n\t\tindex = 0,\r\n\t\tcascadeOrder = [\"all\", \"dataPipeline\", \"display\", \"displayPipeline\", \"end\"],\r\n\t\tdisplayIndex;\r\n\r\n\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\r\n\t\t\tif(index > -1){\r\n\t\t\t\tstage = \"dataPipeline\";\r\n\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\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tstage = \"displayPipeline\";\r\n\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\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\r\n\t\t\treturn;\r\n\t\t}else{\r\n\t\t\tthis.dispatch(\"data-refeshing\");\r\n\r\n\t\t\tif(!handler){\r\n\t\t\t\tthis.activeRowsPipeline[0] = this.rows.slice(0);\r\n\t\t\t}\r\n\r\n\t\t\t//cascade through data refresh stages\r\n\t\t\tswitch(stage){\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\t//handle case where alldata needs refreshing\r\n\r\n\t\t\t\tcase \"dataPipeline\":\r\n\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\r\n\t\t\t\t\tthis.activeRowsPipeline[i + 1] = result || this.activeRowsPipeline[i].slice(0);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.setActiveRows(this.activeRowsPipeline[this.dataPipeline.length]);\r\n\r\n\t\t\t\tthis.regenerateRowNumbers();\r\n\r\n\t\t\t\tcase \"display\":\r\n\t\t\t\tindex = 0;\r\n\t\t\t\tthis.resetDisplayRows();\r\n\r\n\t\t\t\tcase \"displayPipeline\":\r\n\t\t\t\tfor(let i = index; i < this.displayPipeline.length; i++){\r\n\t\t\t\t\tlet result = this.displayPipeline[i].handler((i ? this.getDisplayRows(i - 1) : this.activeRows).slice(0), renderInPosition);\r\n\r\n\t\t\t\t\tthis.setDisplayRows(result || this.getDisplayRows(i - 1).slice(0), i);\r\n\t\t\t\t}\r\n\r\n\t\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}\r\n\r\n\t\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\t\tif(renderInPosition){\r\n\t\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t\t}else{\r\n\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\r\n\t\t\t\t\tthis.renderTable();\r\n\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}\r\n\r\n\t\t\tthis.dispatch(\"data-refreshed\");\r\n\t\t}\r\n\t}\r\n\r\n\t//regenerate row numbers for row number formatter if in use\r\n\tregenerateRowNumbers(){\r\n\t\tif(this.rowNumColumn){\r\n\t\t\tthis.activeRows.forEach((row) => {\r\n\t\t\t\tvar cell = row.getCell(this.rowNumColumn);\r\n\r\n\t\t\t\tif(cell){\r\n\t\t\t\t\tcell._generateContents();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tsetActiveRows(activeRows){\r\n\t\tthis.activeRows = activeRows;\r\n\t\tthis.activeRowsCount = this.activeRows.length;\r\n\t}\r\n\r\n\t//reset display rows array\r\n\tresetDisplayRows(){\r\n\t\tthis.displayRows = [];\r\n\r\n\t\tthis.displayRows.push(this.activeRows.slice(0));\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[0].length;\r\n\t}\r\n\r\n\tgetNextDisplayIndex(){\r\n\t\treturn this.displayRows.length;\r\n\t}\r\n\r\n\t//set display row pipeline data\r\n\tsetDisplayRows(displayRows, index){\r\n\r\n\t\tvar output = true;\r\n\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\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\r\n\t\treturn output;\r\n\t}\r\n\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\r\n\tgetVisibleRows(chain, viewable){\r\n\t\tvar rows = Object.assign([], this.renderer.visibleRows(!viewable));\r\n\r\n\t\tif(chain){\r\n\t\t\trows = this.chain(\"rows-visible\", [viewable], rows, rows);\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t//repeat action accross display rows\r\n\tdisplayRowIterator(callback){\r\n\t\tthis.activeRowsPipeline.forEach(callback);\r\n\t\tthis.displayRows.forEach(callback);\r\n\r\n\t\tthis.displayRowsCount = this.displayRows[this.displayRows.length -1].length;\r\n\t}\r\n\r\n\t//return only actual rows (not group headers etc)\r\n\tgetRows(type){\r\n\t\tvar rows;\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"active\":\r\n\t\t\trows = this.activeRows;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"display\":\r\n\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"visible\":\r\n\t\t\trows = this.getVisibleRows(true);\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\trows = this.chain(\"rows-retrieve\", type, null, this.rows) || this.rows;\r\n\t\t}\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t///////////////// Table Rendering /////////////////\r\n\t//trigger rerender of table in current position\r\n\treRenderInPosition(callback){\r\n\t\tif(this.redrawBlock){\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback();\r\n\t\t\t}else{\r\n\t\t\t\tthis.redrawBlockRenderInPosition = true;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderer.rerenderRows(callback);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRenderer(){\r\n\t\tvar renderClass;\r\n\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\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\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\r\n\t\t\tif((this.table.element.clientHeight || this.table.options.height)){\r\n\t\t\t\tthis.fixedHeight = true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.fixedHeight = false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Unable to find matching renderer:\", table.options.renderVertical);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRenderMode(){\r\n\t\treturn this.renderMode;\r\n\t}\r\n\r\n\trenderTable(){\r\n\t\tthis.dispatchExternal(\"renderStarted\");\r\n\r\n\t\tthis.element.scrollTop = 0;\r\n\r\n\t\tthis._clearTable();\r\n\r\n\t\tif(this.displayRowsCount){\r\n\t\t\tthis.renderer.renderRows();\r\n\r\n\t\t\tif(this.firstRender){\r\n\t\t\t\tthis.firstRender = false;\r\n\t\t\t\tthis.layoutRefresh();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderEmptyScroll();\r\n\t\t}\r\n\r\n\t\tif(!this.fixedHeight){\r\n\t\t\tthis.adjustTableSize();\r\n\t\t}\r\n\r\n\t\tthis.dispatch(\"table-layout\");\r\n\r\n\t\tif(!this.displayRowsCount){\r\n\t\t\tthis._showPlaceholder();\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"renderComplete\");\r\n\t}\r\n\r\n\t//show scrollbars on empty table div\r\n\trenderEmptyScroll(){\r\n\t\tif(this.table.options.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\r\n\t_clearTable(){\r\n\t\tvar element = this.tableElement;\r\n\r\n\t\tthis._clearPlaceholder();\r\n\r\n\t\tthis.scrollTop = 0;\r\n\t\tthis.scrollLeft = 0;\r\n\r\n\t\tthis.renderer.clearRows();\r\n\t}\r\n\r\n\t_showPlaceholder(){\r\n\t\tif(this.table.options.placeholder){\r\n\r\n\t\t\tthis.table.options.placeholder.setAttribute(\"tabulator-render-mode\", this.renderMode);\r\n\r\n\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\tthis.table.options.placeholder.style.width = this.table.columnManager.getWidth() + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\t_clearPlaceholder(){\r\n\t\tif(this.table.options.placeholder && this.table.options.placeholder.parentNode){\r\n\t\t\tthis.table.options.placeholder.parentNode.removeChild(this.table.options.placeholder);\r\n\t\t}\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//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\r\n\t//adjust the height of the table holder to fit in the Tabulator element\r\n\tadjustTableSize(){\r\n\t\tvar initialHeight = this.element.clientHeight,\r\n\t\tmodExists;\r\n\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\r\n\t\t\tif(this.fixedHeight){\r\n\t\t\t\tthis.element.style.minHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.height = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t\tthis.element.style.maxHeight = \"calc(100% - \" + otherHeight + \"px)\";\r\n\t\t\t}else{\r\n\t\t\t\tthis.element.style.height = \"\";\r\n\t\t\t\tthis.element.style.height = (this.table.element.clientHeight - otherHeight) + \"px\";\r\n\t\t\t\tthis.element.scrollTop = this.scrollTop;\r\n\t\t\t}\r\n\r\n\t\t\tthis.renderer.resize();\r\n\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}\r\n\r\n\t//renitialize all rows\r\n\treinitialize(){\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\trow.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\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\r\n\t//restore table redrawing\r\n\trestoreRedraw (){\r\n\t\tthis.redrawBlock = false;\r\n\r\n\t\tif(this.redrawBlockRestoreConfig){\r\n\t\t\tthis.refreshActiveData(this.redrawBlockRestoreConfig.handler, this.redrawBlockRestoreConfig.skipStage, this.redrawBlockRestoreConfig.renderInPosition)\r\n\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\r\n\t\tthis.redrawBlockRenderInPosition = false;\r\n\t}\r\n\r\n\t//redraw table\r\n\tredraw (force){\r\n\t\tvar pos = 0,\r\n\t\tleft = this.scrollLeft;\r\n\r\n\t\tthis.adjustTableSize();\r\n\r\n\t\tthis.table.tableWidth = this.table.element.clientWidth;\r\n\r\n\t\tif(!force){\r\n\t\t\tthis.reRenderInPosition();\r\n\t\t\tthis.scrollHorizontal(left);\r\n\r\n\t\t\tif(!this.displayRowsCount){\r\n\t\t\t\tif(this.table.options.placeholder){\r\n\t\t\t\t\tthis.getElement().appendChild(this.table.options.placeholder);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.renderTable();\r\n\t\t}\r\n\t}\r\n\r\n\tresetScroll(){\r\n\t\tthis.element.scrollLeft = 0;\r\n\t\tthis.element.scrollTop = 0;\r\n\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.external = false;\r\n\t\tthis.links = [];\r\n\r\n\t\tthis.initializeElement();\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\tinitializeElement(){\r\n\t\tif(this.table.options.footerElement){\r\n\r\n\t\t\tswitch(typeof this.table.options.footerElement){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(this.table.options.footerElement[0] === \"<\"){\r\n\t\t\t\t\tthis.element.innerHTML = this.table.options.footerElement;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.external = true;\r\n\t\t\t\t\tthis.element = document.querySelector(this.table.options.footerElement);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.element = this.table.options.footerElement;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tappend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.appendChild(element);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tprepend(element, parent){\r\n\t\tthis.activate(parent);\r\n\r\n\t\tthis.element.insertBefore(element, this.element.firstChild);\r\n\t\tthis.table.rowManager.adjustTableSize();\r\n\t}\r\n\r\n\tremove(element){\r\n\t\telement.parentNode.removeChild(element);\r\n\t\tthis.deactivate();\r\n\t}\r\n\r\n\tdeactivate(force){\r\n\t\tif(!this.element.firstChild || force){\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\t}\r\n\t\t\tthis.active = false;\r\n\t\t}\r\n\t}\r\n\r\n\tactivate(parent){\r\n\t\tif(!this.active){\r\n\t\t\tthis.active = true;\r\n\t\t\tif(!this.external){\r\n\t\t\t\tthis.table.element.appendChild(this.getElement());\r\n\t\t\t\tthis.table.element.style.display = '';\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(parent){\r\n\t\t\tthis.links.push(parent);\r\n\t\t}\r\n\t}\r\n\r\n\tredraw(){\r\n\t\tthis.links.forEach(function(link){\r\n\t\t\tlink.footerRedraw();\r\n\t\t});\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\nimport Helpers from './Helpers.js';\r\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\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\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\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\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\r\n\t\tthis.pseudoTracking = true;\r\n\t}\r\n\r\n\tpseudoMouseEnter(key, e, target){\r\n\t\tif(this.pseudoTrackers[key].target !== target){\r\n\t\t\t\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\r\n\t\t\t}\r\n\r\n\t\t\tthis.pseudoMouseLeave(key, e);\r\n\r\n\t\t\tthis.pseudoTrackers[key].target = target;\r\n\r\n\t\t\tthis.dispatch(key + \"-mouseenter\", e, target);\r\n\t\t}\r\n\t}\r\n\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\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\r\n\t\r\n\t\tleaveList.forEach((key) => {\r\n\t\t\tvar target = this.pseudoTrackers[key].target;\r\n\r\n\t\t\tif(this.pseudoTrackers[key].target){\r\n\t\t\t\tthis.dispatch(key + \"-mouseleave\", e, target);\r\n\r\n\t\t\t\tthis.pseudoTrackers[key].target = null;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\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\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\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\r\n\t\tthis.triggerEvents(type, e, targets);\r\n\r\n\t\tif(this.pseudoTracking && (type == \"mouseover\" || type == \"mouseleave\") && !Object.keys(targets).length){\r\n\t\t\tthis.pseudoMouseLeave(\"none\", e);\r\n\t\t}\r\n\t}\r\n\t\r\n\tfindTargets(path){\r\n\t\tvar targets = {};\r\n\t\t\r\n\t\tlet componentMap = Object.keys(this.componentMap);\r\n\t\t\r\n\t\tfor (let el of path) {\r\n\t\t\tlet classList = el.classList ? [...el.classList] : [];\r\n\t\t\t\r\n\t\t\tlet abort = classList.filter((item) => {\r\n\t\t\t\treturn this.abortClasses.includes(item);\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\tif(abort.length){\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tlet elTargets = classList.filter((item) => {\r\n\t\t\t\treturn componentMap.includes(item);\r\n\t\t\t})\r\n\t\t\t\r\n\t\t\tfor (let target of elTargets) {\r\n\t\t\t\ttargets[this.componentMap[target]] = el;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(targets.group && targets.group === targets.row){\r\n\t\t\tdelete targets.row;\r\n\t\t}\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\r\n\tbindComponents(type, targets){\r\n\t\t//ensure row component is looked up before cell\r\n\t\tvar keys = Object.keys(targets).reverse(),\r\n\t\tlistener = this.listeners[type],\r\n\t\ttargetMatches = {};\r\n\t\t\r\n\t\tfor(let key of keys){\r\n\t\t\tlet component;\r\n\t\t\tlet target = targets[key];\r\n\t\t\tlet previousTarget = this.previousTargets[key];\r\n\t\t\t\r\n\t\t\tif(previousTarget && previousTarget.target === target){\r\n\t\t\t\tcomponent = previousTarget.component;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(key){\r\n\t\t\t\t\tcase \"row\":\r\n\t\t\t\t\tcase \"group\":\r\n\t\t\t\t\tif(listener.components.includes(\"row\") || listener.components.includes(\"cell\") || listener.components.includes(\"group\")){\r\n\t\t\t\t\t\tlet rows = this.table.rowManager.getVisibleRows(true);\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tcomponent = rows.find((row) => {\r\n\t\t\t\t\t\t\treturn row.getElement() === target;\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"column\":\r\n\t\t\t\t\tif(listener.components.includes(\"column\")){\r\n\t\t\t\t\t\tcomponent = this.table.columnManager.findColumn(target);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"cell\":\r\n\t\t\t\t\tif(listener.components.includes(\"cell\")){\r\n\t\t\t\t\t\tif(targets[\"row\"]){\r\n\t\t\t\t\t\t\tcomponent = targets[\"row\"].findCell(target);\r\n\t\t\t\t\t\t}else{\r\n\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}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(component){\r\n\t\t\t\ttargets[key] = component;\r\n\t\t\t\ttargetMatches[key] = {\r\n\t\t\t\t\ttarget:target,\r\n\t\t\t\t\tcomponent:component,\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.previousTargets = targetMatches;\r\n\t\t\r\n\t\treturn targets;\r\n\t}\r\n\t\r\n\ttriggerEvents(type, e, targets){\r\n\t\tvar listener = this.listeners[type];\r\n\t\t\r\n\t\tfor(let key in targets){\r\n\t\t\tif(targets[key] && listener.components.includes(key)){\r\n\t\t\t\tthis.dispatch(key + \"-\" + type, e, targets[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tclearWatchers(){\r\n\t\tfor(let key in this.listeners){\r\n\t\t\tlet listener = this.listeners[key];\r\n\t\t\r\n\t\t\tif(listener.handler){\r\n\t\t\t\tthis.el.removeEventListener(key, listener.handler)\r\n\t\t\t\tlistener.handler = null;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","export default class ComponentFunctionBinder{\r\n\r\n\tconstructor(table){\r\n\t\tthis.table = table;\r\n\r\n\t\tthis.bindings = {};\r\n\t}\r\n\r\n\tbind(type, funcName, handler){\r\n\t\tif(!this.bindings[type]){\r\n\t\t\tthis.bindings[type] = {};\r\n\t\t}\r\n\r\n\t\tif(this.bindings[type][funcName]){\r\n\t\t\tconsole.warn(\"Unable to bind component handler, a matching function name is already bound\", type, funcName, hanlder)\r\n\t\t}else{\r\n\t\t\tthis.bindings[type][funcName] = handler;\r\n\t\t}\r\n\t}\r\n\r\n\thandle(type, component, name){\r\n\t\tif(this.bindings[type] && this.bindings[type][name]){\r\n\t\t\treturn this.bindings[type][name].bind(null, component);\r\n\t\t}else{\r\n\t\t\tif(name !== \"then\" && typeof name === \"string\" && !name.startsWith(\"_\")){\r\n\t\t\t\t\tconsole.error(\"The \" + type + \" component does not have a \" + name + \" function, have you checked that you have the correct Tabulator module installed?\")\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}","import CoreFeature from '../CoreFeature.js';\r\n\r\nexport default class DataLoader extends CoreFeature{\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.loaderElement = this.createLoaderElement(); //loader message div\r\n\t\tthis.msgElement = this.createMsgElement(); //message element\r\n\t\tthis.loadingElement = null;\r\n\t\tthis.errorElement = null;\r\n\r\n\t\tthis.requestOrder = 0; //prevent requests comming out of sequence if overridden by another load request\r\n\t\tthis.loading = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar template;\r\n\r\n\t\tthis.loaderElement.appendChild(this.msgElement);\r\n\r\n\t\tif(this.table.options.dataLoaderLoading){\r\n\t\t\tif(typeof this.table.options.dataLoaderLoading == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderLoading.trim();\r\n\t\t\t\tthis.loadingElement = template.firstElementChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.loadingElement = this.table.options.dataLoaderLoading;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataLoaderError){\r\n\t\t\tif(typeof this.table.options.dataLoaderError == \"string\"){\r\n\t\t\t\ttemplate = document.createElement('template');\r\n\t\t\t\ttemplate.innerHTML = this.table.options.dataLoaderError.trim();\r\n\t\t\t\tthis.errorElement = template.firstElementChild;\r\n\t\t\t}else{\r\n\t\t\t\tthis.errorElement = this.table.options.dataLoaderError;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcreateLoaderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-loader\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tcreateMsgElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-loader-msg\");\r\n\t\tel.setAttribute(\"role\", \"alert\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tload(data, params, config, replace, silent){\r\n\t\tvar requestNo = ++this.requestOrder;\r\n\r\n\t\tthis.dispatchExternal(\"dataLoading\", data);\r\n\r\n\t\t//parse json data to array\r\n\t\tif (data && (data.indexOf(\"{\") == 0 || data.indexOf(\"[\") == 0)){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(this.confirm(\"data-loading\", [data, params, config, silent])){\r\n\t\t\tthis.loading = true;\r\n\r\n\t\t\tif(!silent){\r\n\t\t\t\tthis.showLoader();\r\n\t\t\t}\r\n\r\n\t\t\t//get params for request\r\n\t\t\tparams = this.chain(\"data-params\", [data, config, silent], params || {}, params || {});\r\n\r\n\t\t\tparams = this.mapParams(params, this.table.options.dataSendParams);\r\n\r\n\t\t\tvar result = this.chain(\"data-load\", [data, params, config, silent], false, Promise.resolve([]));\r\n\t\t\t\r\n\t\t\treturn result.then((response) => {\r\n\t\t\t\tif(!Array.isArray(response) && typeof response == \"object\"){\r\n\t\t\t\t\tresponse = this.mapParams(response, this.objectInvert(this.table.options.dataReceiveParams));\r\n\t\t\t\t}\r\n\r\n\t\t\t\tvar rowData = this.chain(\"data-loaded\", response, null, response);\r\n\r\n\t\t\t\tif(requestNo == this.requestOrder){\r\n\t\t\t\t\tthis.hideLoader();\r\n\r\n\t\t\t\t\tif(rowData !== false){\r\n\t\t\t\t\t\tthis.dispatchExternal(\"dataLoaded\", rowData);\r\n\t\t\t\t\t\tthis.table.rowManager.setData(rowData, replace, !replace);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Data Load Response Blocked - An active data load request was blocked by an attempt to change table data while the request was being made\");\r\n\t\t\t\t}\r\n\t\t\t}).catch((error) => {\r\n\t\t\t\tconsole.error(\"Data Load Error: \", error);\r\n\t\t\t\tthis.dispatchExternal(\"dataLoadError\", error);\r\n\r\n\t\t\t\tif(!silent){\r\n\t\t\t\t\tthis.showError();\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t}, this.table.options.dataLoaderErrorTimeout);\r\n\t\t\t})\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.loading = false;\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"dataLoaded\", data);\r\n\r\n\t\t\tif(!data){\r\n\t\t\t\tdata = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.setData(data, replace, !replace);\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\t}\r\n\r\n\tmapParams(params, map){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in params){\r\n\t\t\toutput[map.hasOwnProperty(key) ? map[key] : key] = params[key];\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tobjectInvert(obj){\r\n\t\tvar output = {};\r\n\r\n\t\tfor(let key in obj){\r\n\t\t\toutput[obj[key]] = key;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tblockActiveLoad(){\r\n\t\tthis.requestOrder++;\r\n\t}\r\n\r\n\tshowLoader(){\r\n\t\tvar shouldLoad = typeof this.table.options.dataLoader === \"function\" ? this.table.options.dataLoader() : this.table.options.dataLoader;\r\n\r\n\t\tif(shouldLoad){\r\n\t\t\tthis.hideLoader();\r\n\r\n\t\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\r\n\t\t\tthis.msgElement.classList.remove(\"tabulator-error\");\r\n\t\t\tthis.msgElement.classList.add(\"tabulator-loading\");\r\n\r\n\t\t\tif(this.loadingElement){\r\n\t\t\t\tthis.msgElement.appendChild(this.loadingElement);\r\n\t\t\t}else{\r\n\t\t\t\tthis.msgElement.innerHTML = this.langText(\"data|loading\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n\r\n\tshowError(){\r\n\t\tthis.hideLoader();\r\n\r\n\t\twhile(this.msgElement.firstChild) this.msgElement.removeChild(this.msgElement.firstChild);\r\n\t\tthis.msgElement.classList.remove(\"tabulator-loading\");\r\n\t\tthis.msgElement.classList.add(\"tabulator-error\");\r\n\r\n\t\tif(this.errorElement){\r\n\t\t\tthis.msgElement.appendChild(this.errorElement);\r\n\t\t}else{\r\n\t\t\tthis.msgElement.innerHTML = this.langText(\"data|error\");\r\n\t\t}\r\n\r\n\t\tthis.table.element.appendChild(this.loaderElement);\r\n\t}\r\n\r\n\r\n\thideLoader(){\r\n\t\tif(this.loaderElement.parentNode){\r\n\t\t\tthis.loaderElement.parentNode.removeChild(this.loaderElement);\r\n\t\t}\r\n\t}\r\n}","export default class ExternalEventBus {\r\n\r\n\tconstructor(table, optionsList, debug){\r\n\t\tthis.table = table;\r\n\t\tthis.events = {};\r\n\t\tthis.optionsList = optionsList || {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push(callback);\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tdelete this.events[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift(),\r\n\t\tresult;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((callback, i) => {\r\n\t\t\t\tlet callResult = callback.apply(this.table, args);\r\n\r\n\t\t\t\tif(!i){\r\n\t\t\t\t\tresult = callResult;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn result;\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"ExternalEvent:\" + args[0];\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments)\r\n\t}\r\n}","export default class InternalEventBus {\r\n\r\n\tconstructor(debug){\r\n\t\tthis.events = {};\r\n\t\tthis.subscriptionNotifiers = {};\r\n\r\n\t\tthis.dispatch = debug ? this._debugDispatch.bind(this) : this._dispatch.bind(this);\r\n\t\tthis.chain = debug ? this._debugChain.bind(this) : this._chain.bind(this);\r\n\t\tthis.confirm = debug ? this._debugConfirm.bind(this) : this._confirm.bind(this);\r\n\t\tthis.debug = debug;\r\n\t}\r\n\r\n\tsubscriptionChange(key, callback){\r\n\t\tif(!this.subscriptionNotifiers[key]){\r\n\t\t\tthis.subscriptionNotifiers[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.subscriptionNotifiers[key].push(callback);\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis._notifiySubscriptionChange(key, true);\r\n\t\t}\r\n\t}\r\n\r\n\tsubscribe(key, callback, priority = 10000){\r\n\t\tif(!this.events[key]){\r\n\t\t\tthis.events[key] = [];\r\n\t\t}\r\n\r\n\t\tthis.events[key].push({callback, priority});\r\n\r\n\t\tthis.events[key].sort((a, b) => {\r\n\t\t\treturn a.priority - b.priority;\r\n\t\t});\r\n\r\n\t\tthis._notifiySubscriptionChange(key, true);\r\n\t}\r\n\r\n\tunsubscribe(key, callback){\r\n\t\tvar index;\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tif(callback){\r\n\t\t\t\tindex = this.events[key].findIndex((item) => {\r\n\t\t\t\t\treturn item.callback === callback;\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tthis.events[key].splice(index, 1);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Cannot remove event, no matching event found:\", key, callback);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cannot remove event, no events set on:\", key);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._notifiySubscriptionChange(key, false);\r\n\t}\r\n\r\n\tsubscribed(key){\r\n\t\treturn this.events[key] && this.events[key].length;\r\n\t}\r\n\r\n\t_chain(key, args, initialValue, fallback){\r\n\t\tvar value = initialValue;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tvalue = subscriber.callback.apply(this, args.concat([value]));\r\n\t\t\t});\r\n\r\n\t\t\treturn value;\r\n\t\t}else{\r\n\t\t\treturn typeof fallback === \"function\" ? fallback() : fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t_confirm(key, args){\r\n\t\tvar confirmed = false;\r\n\r\n\t\tif(!Array.isArray(args)){\r\n\t\t\targs = [args];\r\n\t\t}\r\n\r\n\t\tif(this.subscribed(key)){\r\n\t\t\tthis.events[key].forEach((subscriber, i) => {\r\n\t\t\t\tif(subscriber.callback.apply(this, args)){\r\n\t\t\t\t\tconfirmed = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn confirmed;\r\n\t}\r\n\r\n\t_notifiySubscriptionChange(key, subscribed){\r\n\t\tvar notifiers = this.subscriptionNotifiers[key];\r\n\r\n\t\tif(notifiers){\r\n\t\t\tnotifiers.forEach((callback)=>{\r\n\t\t\t\tcallback(subscribed);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_dispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tif(this.events[key]){\r\n\t\t\tthis.events[key].forEach((subscriber) => {\r\n\t\t\t\tlet callResult = subscriber.callback.apply(this, args);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t_debugDispatch(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._dispatch(...arguments);\r\n\t}\r\n\r\n\t_debugChain(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._chain(...arguments);\r\n\t}\r\n\r\n\t_debugConfirm(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args[0];\r\n\r\n\t\targs[0] = \"InternalEvent:\" + key;\r\n\r\n\t\tif(this.debug === true || this.debug.includes(key)){\r\n\t\t\tconsole.log(...args);\r\n\t\t}\r\n\r\n\t\treturn this._confirm(...arguments);\r\n\t}\r\n}","import Tabulator from '../Tabulator.js';\r\n\r\nclass TableRegistry {\r\n\r\n\tstatic register(table){\r\n\t\tTableRegistry.tables.push(table);\r\n\t}\r\n\r\n\tstatic deregister(table){\r\n\t\tvar index = TableRegistry.tables.indexOf(table);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tTableRegistry.tables.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstatic lookupTable(query, silent){\r\n\t\tvar results = [],\r\n\t\tmatches, match;\r\n\r\n\t\tif(typeof query === \"string\"){\r\n\t\t\tmatches = document.querySelectorAll(query);\r\n\r\n\t\t\tif(matches.length){\r\n\t\t\t\tfor(var i = 0; i < matches.length; i++){\r\n\t\t\t\t\tmatch = TableRegistry.matchElement(matches[i]);\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tresults.push(match);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if((typeof HTMLElement !== \"undefined\" && query instanceof HTMLElement) || query instanceof Tabulator){\r\n\t\t\tmatch = TableRegistry.matchElement(query);\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tresults.push(match);\r\n\t\t\t}\r\n\t\t}else if(Array.isArray(query)){\r\n\t\t\tquery.forEach(function(item){\r\n\t\t\t\tresults = results.concat(TableRegistry.lookupTable(item));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tif(!silent){\r\n\t\t\t\tconsole.warn(\"Table Connection Error - Invalid Selector\", query);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\tstatic matchElement(element){\r\n\t\treturn TableRegistry.tables.find(function(table){\r\n\t\t\treturn element instanceof Tabulator ? table === element : table.element === element;\r\n\t\t});\r\n\t}\r\n}\r\n\r\nTableRegistry.tables = [];\r\n\r\nexport default TableRegistry;","import CoreFeature from './CoreFeature.js';\r\n\r\nclass Module extends CoreFeature{\r\n\r\n\tconstructor(table, name){\r\n\t\tsuper(table);\r\n\r\n\t\tthis._handler = null;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// setup module when table is initialized, to be overriden in module\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Options Registration ///////\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableOption(key, value){\r\n\t\tthis.table.optionsList.register(key, value);\r\n\t}\r\n\r\n\tregisterColumnOption(key, value){\r\n\t\tthis.table.columnManager.optionsList.register(key, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t/// Public Function Registation ///\r\n\t///////////////////////////////////\r\n\r\n\tregisterTableFunction(name, func){\r\n\t\tif(typeof this.table[name] === \"undefined\"){\r\n\t\t\tthis.table[name] = func;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Unable to bind table function, name already in use\", name)\r\n\t\t}\r\n\t}\r\n\r\n\tregisterComponentFunction(component, func, handler){\r\n\t\treturn this.table.componentFunctionBinder.bind(component, func, handler);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Data Pipeline //////////\r\n\t///////////////////////////////////\r\n\r\n\tregisterDataHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDataPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\tregisterDisplayHandler(handler, priority){\r\n\t\tthis.table.rowManager.registerDisplayPipelineHandler(handler, priority)\r\n\t\tthis._handler = handler;\r\n\t}\r\n\r\n\trefreshData(renderInPosition, handler){\r\n\t\tif(!handler){\r\n\t\t\thandler = this._handler;\r\n\t\t}\r\n\r\n\t\tif(handler){\r\n\t\t\tthis.table.rowManager.refreshActiveData(handler, false, renderInPosition);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nexport default Module;","//resize columns to fit data they contain and stretch row to fill table, also used for fitDataTable\r\nexport default function(columns){\r\n\tcolumns.forEach(function(column){\r\n\t\tcolumn.reinitializeWidth();\r\n\t});\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","import fitData from './modes/fitData.js';\r\nimport fitDataGeneral from './modes/fitDataGeneral.js';\r\nimport fitDataStretch from './modes/fitDataStretch.js';\r\nimport fitColumns from './modes/fitColumns.js';\r\n\r\nexport default {\r\n\tfitData:fitData,\r\n\tfitDataFill:fitDataGeneral,\r\n\tfitDataTable:fitDataGeneral,\r\n\tfitDataStretch:fitDataStretch,\r\n\tfitColumns:fitColumns ,\r\n};","//resize columns to fit data they contain\r\nexport default function(columns){\r\n\tthis.table.columnManager.renderer.reinitializeColumnWidths(columns);\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n};","//resize columns to fit data the contain and stretch last column to fill table\r\nexport default function(columns){\r\n\tvar colsWidth = 0,\r\n\ttableWidth = this.table.rowManager.element.clientWidth,\r\n\tgap = 0,\r\n\tlastCol = false;\r\n\r\n\tcolumns.forEach((column, i) => {\r\n\t\tif(!column.widthFixed){\r\n\t\t\tcolumn.reinitializeWidth();\r\n\t\t}\r\n\r\n\t\tif(this.table.options.responsiveLayout ? column.modules.responsive.visible : column.visible){\r\n\t\t\tlastCol = column;\r\n\t\t}\r\n\r\n\t\tif(column.visible){\r\n\t\t\tcolsWidth += column.getWidth();\r\n\t\t}\r\n\t});\r\n\r\n\tif(lastCol){\r\n\t\tgap = tableWidth - colsWidth + lastCol.getWidth();\r\n\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tlastCol.setWidth(0);\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\r\n\t\tif(gap > 0){\r\n\t\t\tlastCol.setWidth(gap);\r\n\t\t}else{\r\n\t\t\tlastCol.reinitializeWidth();\r\n\t\t}\r\n\t}else{\r\n\t\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\t\tthis.table.modules.responsiveLayout.update();\r\n\t\t}\r\n\t}\r\n};","//resize columns to fit\r\nexport default function(columns){\r\n\tvar totalWidth = this.table.element.clientWidth; //table element width\r\n\tvar fixedWidth = 0; //total width of columns with a defined width\r\n\tvar flexWidth = 0; //total width available to flexible columns\r\n\tvar flexGrowUnits = 0; //total number of widthGrow blocks accross all columns\r\n\tvar flexColWidth = 0; //desired width of flexible columns\r\n\tvar flexColumns = []; //array of flexible width columns\r\n\tvar fixedShrinkColumns = []; //array of fixed width columns that can shrink\r\n\tvar flexShrinkUnits = 0; //total number of widthShrink blocks accross all columns\r\n\tvar overflowWidth = 0; //horizontal overflow width\r\n\tvar gapFill=0; //number of pixels to be added to final column to close and half pixel gaps\r\n\r\n\tfunction calcWidth(width){\r\n\t\tvar colWidth;\r\n\r\n\t\tif(typeof(width) == \"string\"){\r\n\t\t\tif(width.indexOf(\"%\") > -1){\r\n\t\t\t\tcolWidth = (totalWidth / 100) * parseInt(width);\r\n\t\t\t}else{\r\n\t\t\t\tcolWidth = parseInt(width);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcolWidth = width;\r\n\t\t}\r\n\r\n\t\treturn colWidth;\r\n\t}\r\n\r\n\t//ensure columns resize to take up the correct amount of space\r\n\tfunction scaleColumns(columns, freeSpace, colWidth, shrinkCols){\r\n\r\n\t\tvar oversizeCols = [],\r\n\t\toversizeSpace = 0,\r\n\t\tremainingSpace = 0,\r\n\t\tnextColWidth = 0,\r\n\t\tremainingFlexGrowUnits = flexGrowUnits,\r\n\t\tgap = 0,\r\n\t\tchangeUnits = 0,\r\n\t\tundersizeCols = [];\r\n\r\n\t\tfunction calcGrow(col){\r\n\t\t\treturn (colWidth * (col.column.definition.widthGrow || 1));\r\n\t\t}\r\n\r\n\t\tfunction calcShrink(col){\r\n\t\t\treturn (calcWidth(col.width) - (colWidth * (col.column.definition.widthShrink || 0)))\r\n\t\t}\r\n\r\n\t\tcolumns.forEach(function(col, i){\r\n\t\t\tvar width = shrinkCols ? calcShrink(col) : calcGrow(col);\r\n\t\t\tif(col.column.minWidth >= width){\r\n\t\t\t\toversizeCols.push(col);\r\n\t\t\t}else{\r\n\t\t\t\tif(col.column.maxWidth && col.column.maxWidth < width){\r\n\t\t\t\t\tcol.width = col.column.maxWidth;\r\n\t\t\t\t\tfreeSpace -= col.column.maxWidth;\r\n\r\n\t\t\t\t\tremainingFlexGrowUnits -= shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\r\n\t\t\t\t\tif(remainingFlexGrowUnits){\r\n\t\t\t\t\t\tcolWidth = Math.floor(freeSpace/remainingFlexGrowUnits);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tundersizeCols.push(col);\r\n\t\t\t\t\tchangeUnits += shrinkCols ? (col.column.definition.widthShrink || 1) : (col.column.definition.widthGrow || 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(oversizeCols.length){\r\n\t\t\toversizeCols.forEach(function(col){\r\n\t\t\t\toversizeSpace += shrinkCols ? col.width - col.column.minWidth : col.column.minWidth;\r\n\t\t\t\tcol.width = col.column.minWidth;\r\n\t\t\t});\r\n\r\n\t\t\tremainingSpace = freeSpace - oversizeSpace;\r\n\r\n\t\t\tnextColWidth = changeUnits ? Math.floor(remainingSpace/changeUnits) : remainingSpace;\r\n\r\n\t\t\tgap = remainingSpace - (nextColWidth * changeUnits);\r\n\r\n\t\t\tgap += scaleColumns(undersizeCols, remainingSpace, nextColWidth, shrinkCols);\r\n\t\t}else{\r\n\t\t\tgap = changeUnits ? freeSpace - (Math.floor(freeSpace/changeUnits) * changeUnits) : freeSpace;\r\n\r\n\t\t\tundersizeCols.forEach(function(column){\r\n\t\t\t\tcolumn.width = shrinkCols ? calcShrink(column) : calcGrow(column);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn gap;\r\n\t}\r\n\r\n\tif(this.table.options.responsiveLayout && this.table.modExists(\"responsiveLayout\", true)){\r\n\t\tthis.table.modules.responsiveLayout.update();\r\n\t}\r\n\r\n\t//adjust for vertical scrollbar if present\r\n\tif(this.table.rowManager.element.scrollHeight > this.table.rowManager.element.clientHeight){\r\n\t\ttotalWidth -= this.table.rowManager.element.offsetWidth - this.table.rowManager.element.clientWidth;\r\n\t}\r\n\r\n\tcolumns.forEach(function(column){\r\n\t\tvar width, minWidth, colWidth;\r\n\r\n\t\tif(column.visible){\r\n\r\n\t\t\twidth = column.definition.width;\r\n\t\t\tminWidth = parseInt(column.minWidth);\r\n\r\n\t\t\tif(width){\r\n\r\n\t\t\t\tcolWidth = calcWidth(width);\r\n\r\n\t\t\t\tfixedWidth += colWidth > minWidth ? colWidth : minWidth;\r\n\r\n\t\t\t\tif(column.definition.widthShrink){\r\n\t\t\t\t\tfixedShrinkColumns.push({\r\n\t\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\t\twidth:colWidth > minWidth ? colWidth : minWidth\r\n\t\t\t\t\t});\r\n\t\t\t\t\tflexShrinkUnits += column.definition.widthShrink;\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tflexColumns.push({\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t\twidth:0,\r\n\t\t\t\t});\r\n\t\t\t\tflexGrowUnits += column.definition.widthGrow || 1;\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\t//calculate available space\r\n\tflexWidth = totalWidth - fixedWidth;\r\n\r\n\t//calculate correct column size\r\n\tflexColWidth = Math.floor(flexWidth / flexGrowUnits)\r\n\r\n\t//generate column widths\r\n\tvar gapFill = scaleColumns(flexColumns, flexWidth, flexColWidth, false);\r\n\r\n\t//increase width of last column to account for rounding errors\r\n\tif(flexColumns.length && gapFill > 0){\r\n\t\tflexColumns[flexColumns.length-1].width += + gapFill;\r\n\t}\r\n\r\n\t//caculate space for columns to be shrunk into\r\n\tflexColumns.forEach(function(col){\r\n\t\tflexWidth -= col.width;\r\n\t});\r\n\r\n\toverflowWidth = Math.abs(gapFill) + flexWidth;\r\n\r\n\t//shrink oversize columns if there is no available space\r\n\tif(overflowWidth > 0 && flexShrinkUnits){\r\n\t\tgapFill = scaleColumns(fixedShrinkColumns, overflowWidth, Math.floor(overflowWidth / flexShrinkUnits), true);\r\n\t}\r\n\r\n\t//decrease width of last column to account for rounding errors\r\n\tif(fixedShrinkColumns.length){\r\n\t\tfixedShrinkColumns[fixedShrinkColumns.length-1].width -= gapFill;\r\n\t}\r\n\r\n\tflexColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n\r\n\tfixedShrinkColumns.forEach(function(col){\r\n\t\tcol.column.setWidth(col.width);\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultModes from './defaults/modes.js';\r\n\r\nclass Layout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table, \"layout\");\r\n\r\n\t\tthis.mode = null;\r\n\r\n\t\tthis.registerTableOption(\"layout\", \"fitData\"); //layout type\r\n\t\tthis.registerTableOption(\"layoutColumnsOnNewData\", false); //update column widths on setData\r\n\r\n\t\tthis.registerColumnOption(\"widthGrow\");\r\n\t\tthis.registerColumnOption(\"widthShrink\");\r\n\t}\r\n\r\n\t//initialize layout system\r\n\tinitialize(){\r\n\t\tvar layout = this.table.options.layout;\r\n\r\n\t\tif(Layout.modes[layout]){\r\n\t\t\tthis.mode = layout;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Layout Error - invalid mode set, defaulting to 'fitData' : \" + layout);\r\n\t\t\tthis.mode = 'fitData';\r\n\t\t}\r\n\r\n\t\tthis.table.element.setAttribute(\"tabulator-layout\", this.mode);\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//trigger table layout\r\n\tlayout(){\r\n\t\tLayout.modes[this.mode].call(this, this.table.columnManager.columnsByIndex);\r\n\r\n\t\tthis.dispatch(\"layout-refreshed\")\r\n\t}\r\n}\r\n\r\nLayout.moduleName = \"layout\";\r\n\r\n//load defaults\r\nLayout.modes = defaultModes;\r\n\r\nexport default Layout;","import Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultLangs from './defaults/langs.js';\r\n\r\nclass Localize extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.locale = \"default\"; //current locale\r\n\t\tthis.lang = false; //current language\r\n\t\tthis.bindings = {}; //update events to call when locale is changed\r\n\t\tthis.langList = {};\r\n\r\n\t\tthis.registerTableOption(\"locale\", false); //current system language\r\n\t\tthis.registerTableOption(\"langs\", {});\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.langList = Helpers.deepClone(Localize.langs);\r\n\r\n\t\tif(this.table.options.columnDefaults.headerFilterPlaceholder !== false){\r\n\t\t\tthis.setHeaderFilterPlaceholder(this.table.options.columnDefaults.headerFilterPlaceholder);\r\n\t\t}\r\n\r\n\t\tfor(let locale in this.table.options.langs){\r\n\t\t\tthis.installLang(locale, this.table.options.langs[locale]);\r\n\t\t}\r\n\r\n\t\tthis.setLocale(this.table.options.locale);\r\n\r\n\t\tthis.registerTableFunction(\"setLocale\", this.setLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLocale\", this.getLocale.bind(this));\r\n\t\tthis.registerTableFunction(\"getLang\", this.getLang.bind(this));\r\n\t}\r\n\r\n\t//set header placehoder\r\n\tsetHeaderFilterPlaceholder(placeholder){\r\n\t\tthis.langList.default.headerFilters.default = placeholder;\r\n\t}\r\n\r\n\t//set header filter placeholder by column\r\n\tsetHeaderFilterColumnPlaceholder(column, placeholder){\r\n\t\tthis.langList.default.headerFilters.columns[column] = placeholder;\r\n\r\n\t\tif(this.lang && !this.lang.headerFilters.columns[column]){\r\n\t\t\tthis.lang.headerFilters.columns[column] = placeholder;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup a lang description object\r\n\tinstallLang(locale, lang){\r\n\t\tif(this.langList[locale]){\r\n\t\t\tthis._setLangProp(this.langList[locale], lang);\r\n\t\t}else{\r\n\t\t\tthis.langList[locale] = lang;\r\n\t\t}\r\n\t}\r\n\r\n\t_setLangProp(lang, values){\r\n\t\tfor(let key in values){\r\n\t\t\tif(lang[key] && typeof lang[key] == \"object\"){\r\n\t\t\t\tthis._setLangProp(lang[key], values[key])\r\n\t\t\t}else{\r\n\t\t\t\tlang[key] = values[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set current locale\r\n\tsetLocale(desiredLocale){\r\n\t\tdesiredLocale = desiredLocale || \"default\";\r\n\r\n\t\t//fill in any matching languge values\r\n\t\tfunction traverseLang(trans, path){\r\n\t\t\tfor(var prop in trans){\r\n\t\t\t\tif(typeof trans[prop] == \"object\"){\r\n\t\t\t\t\tif(!path[prop]){\r\n\t\t\t\t\t\tpath[prop] = {};\r\n\t\t\t\t\t}\r\n\t\t\t\t\ttraverseLang(trans[prop], path[prop]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpath[prop] = trans[prop];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//determing correct locale to load\r\n\t\tif(desiredLocale === true && navigator.language){\r\n\t\t\t//get local from system\r\n\t\t\tdesiredLocale = navigator.language.toLowerCase();\r\n\t\t}\r\n\r\n\t\tif(desiredLocale){\r\n\t\t\t//if locale is not set, check for matching top level locale else use default\r\n\t\t\tif(!this.langList[desiredLocale]){\r\n\t\t\t\tlet prefix = desiredLocale.split(\"-\")[0];\r\n\r\n\t\t\t\tif(this.langList[prefix]){\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Exact matching locale not found, using closest match: \", desiredLocale, prefix);\r\n\t\t\t\t\tdesiredLocale = prefix;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Localization Error - Matching locale not found, using default: \", desiredLocale);\r\n\t\t\t\t\tdesiredLocale = \"default\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.locale = desiredLocale;\r\n\r\n\t\t//load default lang template\r\n\t\tthis.lang = Helpers.deepClone(this.langList.default || {});\r\n\r\n\t\tif(desiredLocale != \"default\"){\r\n\t\t\ttraverseLang(this.langList[desiredLocale], this.lang);\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(\"localized\", this.locale, this.lang);\r\n\r\n\t\tthis._executeBindings();\r\n\t}\r\n\r\n\t//get current locale\r\n\tgetLocale(locale){\r\n\t\treturn this.locale;\r\n\t}\r\n\r\n\t//get lang object for given local or current if none provided\r\n\tgetLang(locale){\r\n\t\treturn locale ? this.langList[locale] : this.lang;\r\n\t}\r\n\r\n\t//get text for current locale\r\n\tgetText(path, value){\r\n\t\tvar path = value ? path + \"|\" + value : path,\r\n\t\tpathArray = path.split(\"|\"),\r\n\t\ttext = this._getLangElement(pathArray, this.locale);\r\n\r\n\t\t// if(text === false){\r\n\t\t// \tconsole.warn(\"Localization Error - Matching localized text not found for given path: \", path);\r\n\t\t// }\r\n\r\n\t\treturn text || \"\";\r\n\t}\r\n\r\n\t//traverse langs object and find localized copy\r\n\t_getLangElement(path, locale){\r\n\t\tvar root = this.lang;\r\n\r\n\t\tpath.forEach(function(level){\r\n\t\t\tvar rootPath;\r\n\r\n\t\t\tif(root){\r\n\t\t\t\trootPath = root[level];\r\n\r\n\t\t\t\tif(typeof rootPath != \"undefined\"){\r\n\t\t\t\t\troot = rootPath;\r\n\t\t\t\t}else{\r\n\t\t\t\t\troot = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn root;\r\n\t}\r\n\r\n\t//set update binding\r\n\tbind(path, callback){\r\n\t\tif(!this.bindings[path]){\r\n\t\t\tthis.bindings[path] = [];\r\n\t\t}\r\n\r\n\t\tthis.bindings[path].push(callback);\r\n\r\n\t\tcallback(this.getText(path), this.lang);\r\n\t}\r\n\r\n\t//itterate through bindings and trigger updates\r\n\t_executeBindings(){\r\n\t\tfor(let path in this.bindings){\r\n\t\t\tthis.bindings[path].forEach((binding) => {\r\n\t\t\t\tbinding(this.getText(path), this.lang);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n}\r\n\r\nLocalize.moduleName = \"localize\";\r\n\r\n//load defaults\r\nLocalize.langs = defaultLangs;\r\n\r\nexport default Localize;","export default {\r\n\t\"default\":{ //hold default locale text\r\n\t\t\"groups\":{\r\n\t\t\t\"item\":\"item\",\r\n\t\t\t\"items\":\"items\",\r\n\t\t},\r\n\t\t\"columns\":{\r\n\t\t},\r\n\t\t\"data\":{\r\n\t\t\t\"loading\":\"Loading\",\r\n\t\t\t\"error\":\"Error\",\r\n\t\t},\r\n\t\t\"pagination\":{\r\n\t\t\t\"page_size\":\"Page Size\",\r\n\t\t\t\"page_title\":\"Show Page\",\r\n\t\t\t\"first\":\"First\",\r\n\t\t\t\"first_title\":\"First Page\",\r\n\t\t\t\"last\":\"Last\",\r\n\t\t\t\"last_title\":\"Last Page\",\r\n\t\t\t\"prev\":\"Prev\",\r\n\t\t\t\"prev_title\":\"Prev Page\",\r\n\t\t\t\"next\":\"Next\",\r\n\t\t\t\"next_title\":\"Next Page\",\r\n\t\t\t\"all\":\"All\",\r\n\t\t\t\"counter\":{\r\n\t\t\t\t\"showing\": \"Showing\",\r\n\t\t\t\t\"of\": \"of\",\r\n\t\t\t\t\"rows\": \"rows\",\r\n\t\t\t\t\"pages\": \"pages\",\r\n\t\t\t}\r\n\t\t},\r\n\t\t\"headerFilters\":{\r\n\t\t\t\"default\":\"filter column...\",\r\n\t\t\t\"columns\":{}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport TableRegistry from '../../core/tools/TableRegistry.js';\r\n\r\nclass Comms extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"tableComms\", this.receive.bind(this));\r\n\t}\r\n\r\n\tgetConnections(selectors){\r\n\t\tvar connections = [],\r\n\t\tconnection;\r\n\r\n\t\tconnection = TableRegistry.lookupTable(selectors);\r\n\r\n\t\tconnection.forEach((con) =>{\r\n\t\t\tif(this.table !== con){\r\n\t\t\t\tconnections.push(con);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn connections;\r\n\t}\r\n\r\n\tsend(selectors, module, action, data){\r\n\t\tvar connections = this.getConnections(selectors);\r\n\r\n\t\tconnections.forEach((connection) => {\r\n\t\t\tconnection.tableComms(this.table.element, module, action, data);\r\n\t\t});\r\n\r\n\t\tif(!connections.length && selectors){\r\n\t\t\tconsole.warn(\"Table Connection Error - No tables matching selector found\", selectors);\r\n\t\t}\r\n\t}\r\n\r\n\treceive(table, module, action, data){\r\n\t\tif(this.table.modExists(module)){\r\n\t\t\treturn this.table.modules[module].commsReceived(table, action, data);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Inter-table Comms Error - no such module:\", module);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nComms.moduleName = \"comms\";\r\n\r\nexport default Comms;","import * as coreModules from '../modules/core.js';\r\nimport TableRegistry from './TableRegistry.js';\r\n\r\nexport default class ModuleBinder {\r\n\r\n\tconstructor(tabulator, modules){\r\n\t\tthis.bindStaticFuctionality(tabulator);\r\n\t\tthis.bindModules(tabulator, coreModules, true);\r\n\r\n\t\tif(modules){\r\n\t\t\tthis.bindModules(tabulator, modules);\r\n\t\t}\r\n\t}\r\n\r\n\tbindStaticFuctionality(tabulator){\r\n\t\ttabulator.moduleBindings = {};\r\n\r\n\t\ttabulator.extendModule = function(name, property, values){\r\n\t\t\tif(tabulator.moduleBindings[name]){\r\n\t\t\t\tvar source = tabulator.moduleBindings[name][property];\r\n\r\n\t\t\t\tif(source){\r\n\t\t\t\t\tif(typeof values == \"object\"){\r\n\t\t\t\t\t\tfor(let key in values){\r\n\t\t\t\t\t\t\tsource[key] = values[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Module Error - Invalid value type, it must be an object\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Module Error - property does not exist:\", property);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Module Error - module does not exist:\", name);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\ttabulator.registerModule = function(modules){\r\n\t\t\tif(!Array.isArray(modules)){\r\n\t\t\t\tmodules = [modules];\r\n\t\t\t}\r\n\r\n\t\t\tmodules.forEach((mod) => {\r\n\t\t\t\ttabulator.registerModuleBinding(mod)\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModuleBinding = function(mod){\r\n\t\t\ttabulator.moduleBindings[mod.moduleName] = mod;\r\n\t\t};\r\n\r\n\t\ttabulator.findTable = function(query){\r\n\t\t\tvar results = TableRegistry.lookupTable(query, true);\r\n\t\t\treturn Array.isArray(results) && !results.length ? false : results;\r\n\t\t}\r\n\r\n\t\t//ensure that module are bound to instantiated function\r\n\t\ttabulator.prototype.bindModules = function(){\r\n\t\t\tthis.modules = {};\r\n\r\n\t\t\tfor(var name in tabulator.moduleBindings){\r\n\t\t\t\tlet mod = tabulator.moduleBindings[name];\r\n\r\n\t\t\t\tthis.modules[name] = new mod(this);\r\n\r\n\t\t\t\tif(mod.prototype.moduleCore){\r\n\t\t\t\t\tthis.modulesCore[name] = this.modules[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.modulesRegular[name] = this.modules[name];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tbindModules(tabulator, modules, core){\r\n\t\tvar mods = Object.values(modules);\r\n\r\n\t\tif(core){\r\n\t\t\tmods.forEach((mod) => {\r\n\t\t\t\tmod.prototype.moduleCore = true;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\ttabulator.registerModule(mods);\r\n\t}\r\n}","'use strict';\r\n\r\nimport defaultOptions from './defaults/options.js';\r\n\r\nimport ColumnManager from './ColumnManager.js';\r\nimport RowManager from './RowManager.js';\r\nimport FooterManager from './FooterManager.js';\r\n\r\nimport InteractionMonitor from './tools/InteractionMonitor.js';\r\nimport ComponentFunctionBinder from './tools/ComponentFunctionBinder.js';\r\nimport DataLoader from './tools/DataLoader.js';\r\n\r\nimport ExternalEventBus from './tools/ExternalEventBus.js';\r\nimport InternalEventBus from './tools/InternalEventBus.js';\r\n\r\nimport TableRegistry from './tools/TableRegistry.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nimport OptionsList from './tools/OptionsList.js';\r\n\r\nclass Tabulator {\r\n\r\n\tconstructor(element, options){\r\n\r\n\t\tthis.options = {};\r\n\r\n\t\tthis.columnManager = null; // hold Column Manager\r\n\t\tthis.rowManager = null; //hold Row Manager\r\n\t\tthis.footerManager = null; //holder Footer Manager\r\n\t\tthis.vdomHoz = null; //holder horizontal virtual dom\r\n\t\tthis.externalEvents = null; //handle external event messaging\r\n\t\tthis.eventBus = null; //handle internal event messaging\r\n\t\tthis.interactionMonitor = false; //track user interaction\r\n\t\tthis.browser = \"\"; //hold current browser type\r\n\t\tthis.browserSlow = false; //handle reduced functionality for slower browsers\r\n\t\tthis.browserMobile = false; //check if running on mobile, prevent resize cancelling edit on keyboard appearance\r\n\t\tthis.rtl = false; //check if the table is in RTL mode\r\n\t\tthis.originalElement = null; //hold original table element if it has been replaced\r\n\r\n\t\tthis.componentFunctionBinder = new ComponentFunctionBinder(this); //bind component functions\r\n\t\tthis.dataLoader = false; //bind component functions\r\n\r\n\t\tthis.modules = {}; //hold all modules bound to this table\r\n\t\tthis.modulesCore = {}; //hold core modules bound to this table (for initialization purposes)\r\n\t\tthis.modulesRegular = {}; //hold regular modules bound to this table (for initialization purposes)\r\n\r\n\t\tthis.optionsList = new OptionsList(this, \"table constructor\");\r\n\r\n\t\tthis.initialized = false;\r\n\r\n\t\tif(this.initializeElement(element)){\r\n\r\n\t\t\tthis.initialzeCoreSystems(options);\r\n\r\n\t\t\t//delay table creation to allow event bindings immediately after the constructor\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis._create();\r\n\t\t\t})\r\n\t\t}\r\n\r\n\t\tTableRegistry.register(this); //register table for inter-device communication\r\n\t}\r\n\r\n\tinitializeElement(element){\r\n\t\tif(typeof HTMLElement !== \"undefined\" && element instanceof HTMLElement){\r\n\t\t\tthis.element = element;\r\n\t\t\treturn true;\r\n\t\t}else if(typeof element === \"string\"){\r\n\t\t\tthis.element = document.querySelector(element);\r\n\r\n\t\t\tif(this.element){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Tabulator Creation Error - no element found matching selector: \", element);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.error(\"Tabulator Creation Error - Invalid element provided:\", element);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tinitialzeCoreSystems(options){\r\n\t\tthis.columnManager = new ColumnManager(this);\r\n\t\tthis.rowManager = new RowManager(this);\r\n\t\tthis.footerManager = new FooterManager(this);\r\n\t\tthis.dataLoader = new DataLoader(this);\r\n\r\n\t\tthis.bindModules();\r\n\r\n\t\tthis.options = this.optionsList.generate(Tabulator.defaultOptions, options)\r\n\r\n\t\tthis._clearObjectPointers();\r\n\r\n\t\tthis._mapDeprecatedFunctionality();\r\n\r\n\t\tthis.externalEvents = new ExternalEventBus(this, this.options, this.options.debugEventsExternal);\r\n\t\tthis.eventBus = new InternalEventBus(this.options.debugEventsInternal);\r\n\r\n\t\tthis.interactionMonitor = new InteractionMonitor(this);\r\n\r\n\t\tthis.dataLoader.initialize();\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\t\tthis.footerManager.initialize();\r\n\t}\r\n\r\n\t//convert deprecated functionality to new functions\r\n\t_mapDeprecatedFunctionality(){\r\n\t\t//all previously deprecated functionality removed in the 5.0 release\r\n\t}\r\n\r\n\t_clearSelection(){\r\n\r\n\t\tthis.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tif (window.getSelection) {\r\n\t\t if (window.getSelection().empty) { // Chrome\r\n\t\t \twindow.getSelection().empty();\r\n\t\t } else if (window.getSelection().removeAllRanges) { // Firefox\r\n\t\t \twindow.getSelection().removeAllRanges();\r\n\t\t }\r\n\t\t} else if (document.selection) { // IE?\r\n\t\t\tdocument.selection.empty();\r\n\t\t}\r\n\r\n\t\tthis.element.classList.remove(\"tabulator-block-select\");\r\n\t}\r\n\r\n\t//create table\r\n\t_create(){\r\n\t\tthis.externalEvents.dispatch(\"tableBuilding\");\r\n\t\tthis.eventBus.dispatch(\"table-building\");\r\n\r\n\t\tthis._rtlCheck();\r\n\r\n\t\tthis._buildElement();\r\n\r\n\t\tthis._initializeTable();\r\n\r\n\t\tthis._loadInitialData();\r\n\r\n\t\tthis.initialized = true;\r\n\r\n\t\tthis.externalEvents.dispatch(\"tableBuilt\");\r\n\t}\r\n\r\n\t_rtlCheck(){\r\n\t\tvar style = window.getComputedStyle(this.element);\r\n\r\n\t\tswitch(this.options.textDirection){\r\n\t\t\tcase\"auto\":\r\n\t\t\tif(style.direction !== \"rtl\"){\r\n\t\t\t\tbreak;\r\n\t\t\t};\r\n\r\n\t\t\tcase \"rtl\":\r\n\t\t\tthis.element.classList.add(\"tabulator-rtl\");\r\n\t\t\tthis.rtl = true;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"ltr\":\r\n\t\t\tthis.element.classList.add(\"tabulator-ltr\");\r\n\r\n\t\t\tdefault:\r\n\t\t\tthis.rtl = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//clear pointers to objects in default config object\r\n\t_clearObjectPointers(){\r\n\t\tthis.options.columns = this.options.columns.slice(0);\r\n\r\n\t\tif(this.options.data && !this.options.reactiveData){\r\n\t\t\tthis.options.data = this.options.data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\t//build tabulator element\r\n\t_buildElement(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options,\r\n\t\tnewElement;\r\n\r\n\t\tif(element.tagName === \"TABLE\"){\r\n\t\t\tthis.originalElement = this.element;\r\n\t\t\tnewElement = document.createElement(\"div\");\r\n\r\n\t\t\t//transfer attributes to new element\r\n\t\t\tvar attributes = element.attributes;\r\n\r\n\t\t\t// loop through attributes and apply them on div\r\n\t\t\tfor(var i in attributes){\r\n\t\t\t\tif(typeof attributes[i] == \"object\"){\r\n\t\t\t\t\tnewElement.setAttribute(attributes[i].name, attributes[i].value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t// replace table with div element\r\n\t\t\telement.parentNode.replaceChild(newElement, element);\r\n\r\n\t\t\tthis.element = element = newElement;\r\n\t\t}\r\n\r\n\t\telement.classList.add(\"tabulator\");\r\n\t\telement.setAttribute(\"role\", \"grid\");\r\n\r\n\t\t//empty element\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\r\n\t\t//set table height\r\n\t\tif(options.height){\r\n\t\t\toptions.height = isNaN(options.height) ? options.height : options.height + \"px\";\r\n\t\t\telement.style.height = options.height;\r\n\t\t}\r\n\r\n\t\t//set table min height\r\n\t\tif(options.minHeight !== false){\r\n\t\t\toptions.minHeight = isNaN(options.minHeight) ? options.minHeight : options.minHeight + \"px\";\r\n\t\t\telement.style.minHeight = options.minHeight;\r\n\t\t}\r\n\r\n\t\t//set table maxHeight\r\n\t\tif(options.maxHeight !== false){\r\n\t\t\toptions.maxHeight = isNaN(options.maxHeight) ? options.maxHeight : options.maxHeight + \"px\";\r\n\t\t\telement.style.maxHeight = options.maxHeight;\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize core systems and modules\r\n\t_initializeTable(){\r\n\t\tvar element = this.element,\r\n\t\toptions = this.options;\r\n\r\n\t\tthis.interactionMonitor.initialize();\r\n\r\n\t\tthis.columnManager.initialize();\r\n\t\tthis.rowManager.initialize();\r\n\r\n\t\tthis._detectBrowser();\r\n\r\n\t\t//initialize core modules\r\n\t\tfor (let key in this.modulesCore){\r\n\t\t\tlet mod = this.modulesCore[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\t//configure placeholder element\r\n\t\tif(typeof options.placeholder == \"string\"){\r\n\t\t\tvar el = document.createElement(\"div\");\r\n\t\t\tel.classList.add(\"tabulator-placeholder\");\r\n\r\n\t\t\tvar span = document.createElement(\"span\");\r\n\t\t\tspan.innerHTML = options.placeholder;\r\n\r\n\t\t\tel.appendChild(span);\r\n\r\n\t\t\toptions.placeholder = el;\r\n\t\t}\r\n\r\n\t\t//build table elements\r\n\t\telement.appendChild(this.columnManager.getElement());\r\n\t\telement.appendChild(this.rowManager.getElement());\r\n\r\n\t\tif(options.footerElement){\r\n\t\t\tthis.footerManager.activate();\r\n\t\t}\r\n\r\n\t\tif(options.autoColumns && options.data){\r\n\r\n\t\t\tthis.columnManager.generateColumnsFromRowData(this.options.data);\r\n\t\t}\r\n\r\n\t\t//initialize regular modules\r\n\t\tfor (let key in this.modulesRegular){\r\n\t\t\tlet mod = this.modulesRegular[key];\r\n\r\n\t\t\tmod.initialize();\r\n\t\t}\r\n\r\n\t\tthis.columnManager.setColumns(options.columns);\r\n\r\n\t\tthis.eventBus.dispatch(\"table-built\");\r\n\t}\r\n\r\n\t_loadInitialData(){\r\n\t\tthis.dataLoader.load(this.options.data);\r\n\t}\r\n\r\n\t//deconstructor\r\n\tdestroy(){\r\n\t\tvar element = this.element;\r\n\r\n\t\tTableRegistry.deregister(this); //deregister table from inter-device communication\r\n\r\n\t\tthis.eventBus.dispatch(\"table-destroy\");\r\n\r\n\t\t//clear row data\r\n\t\tthis.rowManager.rows.forEach(function(row){\r\n\t\t\trow.wipe();\r\n\t\t});\r\n\r\n\t\tthis.rowManager.rows = [];\r\n\t\tthis.rowManager.activeRows = [];\r\n\t\tthis.rowManager.displayRows = [];\r\n\r\n\t\t//clear DOM\r\n\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\telement.classList.remove(\"tabulator\");\r\n\t}\r\n\r\n\t_detectBrowser(){\r\n\t\tvar ua = navigator.userAgent||navigator.vendor||window.opera;\r\n\r\n\t\tif(ua.indexOf(\"Trident\") > -1){\r\n\t\t\tthis.browser = \"ie\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Edge\") > -1){\r\n\t\t\tthis.browser = \"edge\";\r\n\t\t\tthis.browserSlow = true;\r\n\t\t}else if(ua.indexOf(\"Firefox\") > -1){\r\n\t\t\tthis.browser = \"firefox\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}else{\r\n\t\t\tthis.browser = \"other\";\r\n\t\t\tthis.browserSlow = false;\r\n\t\t}\r\n\r\n\t\tthis.browserMobile = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(ua)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(ua.substr(0,4));\r\n\t}\r\n\r\n\t////////////////// Data Handling //////////////////\r\n\t//block table redrawing\r\n\tblockRedraw(){\r\n\t\treturn this.rowManager.blockRedraw();\r\n\t}\r\n\r\n\t//restore table redrawing\r\n\trestoreRedraw(){\r\n\t\treturn this.rowManager.restoreRedraw();\r\n\t}\r\n\r\n\t//load data\r\n\tsetData(data, params, config){\r\n\t\tif(this.initialized){\r\n\t\t\treturn this.dataLoader.load(data, params, config, false);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setData failed - table not yet initialized. To set initial data please use the 'data' property in the table constructor.\")\r\n\t\t}\r\n\t}\r\n\r\n\t//clear data\r\n\tclearData(){\r\n\t\tthis.dataLoader.blockActiveLoad();\r\n\t\tthis.rowManager.clearData();\r\n\t}\r\n\r\n\t//get table data array\r\n\tgetData(active){\r\n\t\treturn this.rowManager.getData(active);\r\n\t}\r\n\r\n\t//get table data array count\r\n\tgetDataCount(active){\r\n\t\treturn this.rowManager.getDataCount(active);\r\n\t}\r\n\r\n\t//replace data, keeping table in position with same sort\r\n\treplaceData(data, params, config){\r\n\t\tif(this.initialized){\r\n\t\t\treturn this.dataLoader.load(data, params, config, true, true);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"replaceData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateData(data){\r\n\t\tvar responses = 0;\r\n\r\n\t\tif(this.initialized){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data){\r\n\t\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve();\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"updateData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\taddData(data, pos, index){\r\n\t\tif(this.initialized){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data){\r\n\t\t\t\t\tthis.rowManager.addRows(data, pos, index)\r\n\t\t\t\t\t.then((rows) => {\r\n\t\t\t\t\t\tvar output = [];\r\n\r\n\t\t\t\t\t\trows.forEach(function(row){\r\n\t\t\t\t\t\t\toutput.push(row.getComponent());\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tresolve(output);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"addData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//update table data\r\n\tupdateOrAddData(data){\r\n\t\tvar rows = [],\r\n\t\tresponses = 0;\r\n\r\n\t\tif(this.initialized){\r\n\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\tthis.dataLoader.blockActiveLoad();\r\n\r\n\t\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(data){\r\n\t\t\t\t\tdata.forEach((item) => {\r\n\t\t\t\t\t\tvar row = this.rowManager.findRow(item[this.options.index]);\r\n\r\n\t\t\t\t\t\tresponses++;\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.updateData(item)\r\n\t\t\t\t\t\t\t.then(()=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\trows.push(row.getComponent());\r\n\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tthis.rowManager.addRows(item)\r\n\t\t\t\t\t\t\t.then((newRows)=>{\r\n\t\t\t\t\t\t\t\tresponses--;\r\n\t\t\t\t\t\t\t\trows.push(newRows[0].getComponent());\r\n\r\n\t\t\t\t\t\t\t\tif(!responses){\r\n\t\t\t\t\t\t\t\t\tresolve(rows);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Update Error - No data provided\");\r\n\t\t\t\t\treject(\"Update Error - No data provided\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"updateOrAddData failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRow(index){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//get row object\r\n\tgetRowFromPosition(position, active){\r\n\t\tvar row = this.rowManager.getRowFromPosition(position, active);\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching row found:\", position);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//delete row from table\r\n\tdeleteRow(index){\r\n\t\tvar foundRows = [];\r\n\r\n\t\tif(!Array.isArray(index)){\r\n\t\t\tindex = [index];\r\n\t\t}\r\n\r\n\t\t//find matching rows\r\n\t\tfor(let item of index){\r\n\t\t\tlet row = this.rowManager.findRow(item, true);\r\n\r\n\t\t\tif(row){\r\n\t\t\t\tfoundRows.push(row);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.error(\"Delete Error - No matching row found:\", item);\r\n\t\t\t\treturn Promise.reject(\"Delete Error - No matching row found\")\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//sort rows into correct order to ensure smooth delete from table\r\n\t\tfoundRows.sort((a, b) => {\r\n\t\t\treturn this.rowManager.rows.indexOf(a) > this.rowManager.rows.indexOf(b) ? 1 : -1;\r\n\t\t});\r\n\r\n\t\t//delete rows\r\n\t\tfoundRows.forEach((row) =>{\r\n\t\t\trow.delete()\r\n\t\t});\r\n\r\n\t\tthis.rowManager.reRenderInPosition();\r\n\r\n\t\treturn Promise.resolve();\r\n\t}\r\n\r\n\t//add row to table\r\n\taddRow(data, pos, index){\r\n\t\tif(this.initialized){\r\n\t\t\tif(typeof data === \"string\"){\r\n\t\t\t\tdata = JSON.parse(data);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.rowManager.addRows(data, pos, index)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"addRow failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\t//update a row if it exitsts otherwise create it\r\n\tupdateOrAddRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn row.getComponent();\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\treturn this.rowManager.addRows(data)\r\n\t\t\t.then((rows)=>{\r\n\t\t\t\treturn rows[0].getComponent();\r\n\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//update row data\r\n\tupdateRow(index, data){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(row){\r\n\t\t\treturn row.updateData(data)\r\n\t\t\t.then(()=>{\r\n\t\t\t\treturn Promise.resolve(row.getComponent());\r\n\t\t\t})\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Update Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Update Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to row in DOM\r\n\tscrollToRow(index, position, ifVisible){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.scrollToRow(row, position, ifVisible)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Scroll Error - No matching row found:\", index);\r\n\t\t\treturn Promise.reject(\"Scroll Error - No matching row found\");\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(from, to, after){\r\n\t\tvar fromRow = this.rowManager.findRow(from);\r\n\r\n\t\tif(fromRow){\r\n\t\t\tfromRow.moveToRow(to, after);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching row found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\tgetRows(active){\r\n\t\treturn this.rowManager.getComponents(active);\r\n\t}\r\n\r\n\t//get position of row in table\r\n\tgetRowPosition(index, active){\r\n\t\tvar row = this.rowManager.findRow(index);\r\n\r\n\t\tif(row){\r\n\t\t\treturn this.rowManager.getRowPosition(row, active);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Position Error - No matching row found:\", index);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/////////////// Column Functions ///////////////\r\n\tsetColumns(definition){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.columnManager.setColumns(definition);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"setColumns failed - table not yet initialized. To set initial data please use the 'columns' property in the table constructor.\")\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumns(structured){\r\n\t\treturn this.columnManager.getComponents(structured);\r\n\t}\r\n\r\n\tgetColumn(field){\r\n\t\tvar col = this.columnManager.findColumn(field);\r\n\r\n\t\tif(col){\r\n\t\t\treturn col.getComponent();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Find Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetColumnDefinitions(){\r\n\t\treturn this.columnManager.getDefinitionTree();\r\n\t}\r\n\r\n\tshowColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.show();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Show Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\thideColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tcolumn.hide();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Hide Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tif(column.visible){\r\n\t\t\t\tcolumn.hide();\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.show();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Visibility Toggle Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\taddColumn(definition, before, field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\treturn this.columnManager.addColumn(definition, before, column)\r\n\t\t.then((column) => {\r\n\t\t\treturn column.getComponent();\r\n\t\t});\r\n\t}\r\n\r\n\tdeleteColumn(field){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.delete();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Delete Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tupdateColumnDefinition(field, definition){\r\n\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn column.updateDefinition(definition)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Update Error - No matching column found:\", field);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\r\n\tmoveColumn(from, to, after){\r\n\t\tvar fromColumn = this.columnManager.findColumn(from);\r\n\t\tvar toColumn = this.columnManager.findColumn(to);\r\n\r\n\t\tif(fromColumn){\r\n\t\t\tif(toColumn){\r\n\t\t\t\tthis.columnManager.moveColumn(fromColumn, toColumn, after)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Move Error - No matching column found:\", toColumn);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Error - No matching column found:\", from);\r\n\t\t}\r\n\t}\r\n\r\n\t//scroll to column in DOM\r\n\tscrollToColumn(field, position, ifVisible){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar column = this.columnManager.findColumn(field);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\treturn this.columnManager.scrollToColumn(column, position, ifVisible)\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Scroll Error - No matching column found:\", field);\r\n\t\t\t\treturn Promise.reject(\"Scroll Error - No matching column found\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//////////// General Public Functions ////////////\r\n\t//redraw list without updating data\r\n\tredraw(force){\r\n\t\tif(this.initialized){\r\n\t\t\tthis.columnManager.redraw(force);\r\n\t\t\tthis.rowManager.redraw(force);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"redraw failed - table not yet initialized. Please wait for the `tableBuilt` event before calling this function.\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetHeight(height){\r\n\t\tthis.options.height = isNaN(height) ? height : height + \"px\";\r\n\t\tthis.element.style.height = this.options.height;\r\n\t\tthis.rowManager.initializeRenderer();\r\n\t\tthis.rowManager.redraw();\r\n\t}\r\n\r\n\t//////////////////// Event Bus ///////////////////\r\n\r\n\ton(key, callback){\r\n\t\tthis.externalEvents.subscribe(key, callback);\r\n\t}\r\n\r\n\toff(key, callback){\r\n\t\tthis.externalEvents.unsubscribe(key, callback);\r\n\t}\r\n\r\n\tdispatchEvent(){\r\n\t\tvar args = Array.from(arguments),\r\n\t\tkey = args.shift();\r\n\r\n\t\tthis.externalEvents.dispatch(...arguments)\r\n\t}\r\n\r\n\t////////////// Extension Management //////////////\r\n\tmodExists(plugin, required){\r\n\t\tif(this.modules[plugin]){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tif(required){\r\n\t\t\t\tconsole.error(\"Tabulator Module Not Installed: \" + plugin);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tmodule(key){\r\n\t\tvar mod = this.modules[key];\r\n\r\n\t\tif(!mod){\r\n\t\t\tconsole.error(\"Tabulator module not installed: \" + key);\r\n\t\t}\r\n\r\n\t\treturn mod;\r\n\t}\r\n}\r\n\r\n//default setup options\r\nTabulator.defaultOptions = defaultOptions;\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(Tabulator);\r\n\r\nexport default Tabulator;","export default {\r\n\r\n\tdebugEventsExternal:false, //flag to console log events\r\n\tdebugEventsInternal:false, //flag to console log events\r\n\tdebugInvalidOptions:true, //allow toggling of invalid option warnings\r\n\r\n\theight:false, //height of tabulator\r\n\tminHeight:false, //minimum height of tabulator\r\n\tmaxHeight:false, //maximum height of tabulator\r\n\r\n\tcolumnHeaderVertAlign:\"top\", //vertical alignment of column headers\r\n\r\n\tcolumns:[],//store for colum header info\r\n\tcolumnDefaults:{}, //store column default props\r\n\r\n\tdata:false, //default starting data\r\n\r\n\tautoColumns:false, //build columns from data row structure\r\n\tautoColumnsDefinitions:false,\r\n\r\n\tnestedFieldSeparator:\".\", //separator for nested data\r\n\r\n\ttooltipGenerationMode:\"load\", //when to generate tooltips\r\n\r\n\tfooterElement:false, //hold footer element\r\n\r\n\tindex:\"id\", //filed for row index\r\n\r\n\ttextDirection:\"auto\",\r\n\r\n\taddRowPos:\"bottom\", //position to insert blank rows, top|bottom\r\n\r\n\theaderVisible:true, //hide header\r\n\r\n\trenderVertical:\"virtual\",\r\n\trenderHorizontal:\"basic\",\r\n\trenderVerticalBuffer:0, // set virtual DOM buffer size\r\n\r\n\tscrollToRowPosition:\"top\",\r\n\tscrollToRowIfVisible:true,\r\n\r\n\tscrollToColumnPosition:\"left\",\r\n\tscrollToColumnIfVisible:true,\r\n\r\n\trowFormatter:false,\r\n\trowFormatterPrint:null,\r\n\trowFormatterClipboard:null,\r\n\trowFormatterHtmlOutput:null,\r\n\r\n\tplaceholder:false,\r\n\r\n\tdataLoader:true,\r\n\tdataLoaderLoading:false,\r\n\tdataLoaderError:false,\r\n\tdataLoaderErrorTimeout:3000,\r\n\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\r\n}\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defautlAccessors from './defaults/accessors.js';\r\n\r\nclass Accessor extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"download\", \"clipboard\", \"print\", \"htmlOutput\"] //list of accessor types\r\n\r\n\t\tthis.registerColumnOption(\"accessor\");\r\n\t\tthis.registerColumnOption(\"accessorParams\");\r\n\t\tthis.registerColumnOption(\"accessorData\");\r\n\t\tthis.registerColumnOption(\"accessorDataParams\");\r\n\t\tthis.registerColumnOption(\"accessorDownload\");\r\n\t\tthis.registerColumnOption(\"accessorDownloadParams\");\r\n\t\tthis.registerColumnOption(\"accessorClipboard\");\r\n\t\tthis.registerColumnOption(\"accessorClipboardParams\");\r\n\t\tthis.registerColumnOption(\"accessorPrint\");\r\n\t\tthis.registerColumnOption(\"accessorPrintParams\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"accessorHtmlOutputParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-retrieve\", this.transformRow.bind(this));\r\n\t}\r\n\r\n\t//initialize column accessor\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\taccessor;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\taccessor = this.lookupAccessor(column.definition[key]);\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\taccessor:accessor,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.accessor = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupAccessor(value){\r\n\t\tvar accessor = false;\r\n\r\n\t\t//set column accessor\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Accessor.accessors[value]){\r\n\t\t\t\taccessor = Accessor.accessors[value]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Accessor Error - No such accessor found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\taccessor = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn accessor;\r\n\t}\r\n\r\n\t//apply accessor to row\r\n\ttransformRow(row, type){\r\n\t\tvar key = \"accessor\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\trowComponent = row.getComponent();\r\n\r\n\t\t//clone data object with deep copy to isolate internal data from returned result\r\n\t\tvar data = Helpers.deepClone(row.data || {});\r\n\r\n\t\tthis.table.columnManager.traverse(function(column){\r\n\t\t\tvar value, accessor, params, colCompnent;\r\n\r\n\t\t\tif(column.modules.accessor){\r\n\r\n\t\t\t\taccessor = column.modules.accessor[key] || column.modules.accessor.accessor || false;\r\n\r\n\t\t\t\tif(accessor){\r\n\t\t\t\t\tvalue = column.getFieldValue(data);\r\n\r\n\t\t\t\t\tif(value != \"undefined\"){\r\n\t\t\t\t\t\tcolCompnent = column.getComponent();\r\n\t\t\t\t\t\tparams = typeof accessor.params === \"function\" ? accessor.params(value, data, type, colCompnent, rowComponent) : accessor.params;\r\n\t\t\t\t\t\tcolumn.setFieldValue(data, accessor.accessor(value, data, type, params, colCompnent, rowComponent));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\n//load defaults\r\nAccessor.moduleName = \"accessor\";\r\nAccessor.accessors = defautlAccessors;\r\n\r\nexport default Accessor;","export default {}","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nfunction serializeParams(params){\r\n\tvar output = generateParamsList(params),\r\n\tencoded = [];\r\n\r\n\toutput.forEach(function(item){\r\n\t\tencoded.push(encodeURIComponent(item.key) + \"=\" + encodeURIComponent(item.value));\r\n\t});\r\n\r\n\treturn encoded.join(\"&\");\r\n}\r\n\r\nexport default function(url, config, params){\r\n\tif(url){\r\n\t\tif(params && Object.keys(params).length){\r\n\t\t\tif(!config.method || config.method.toLowerCase() == \"get\"){\r\n\t\t\t\tconfig.method = \"get\";\r\n\r\n\t\t\t\turl += (url.includes(\"?\") ? \"&\" : \"?\") + serializeParams(params);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treturn url;\r\n};","function generateParamsList(data, prefix){\r\n\tvar output = [];\r\n\r\n\tprefix = prefix || \"\";\r\n\r\n\tif(Array.isArray(data)){\r\n\t\tdata.forEach((item, i) => {\r\n\t\t\toutput = output.concat(generateParamsList(item, prefix ? prefix + \"[\" + i + \"]\" : i));\r\n\t\t});\r\n\t}else if (typeof data === \"object\"){\r\n\t\tfor (var key in data){\r\n\t\t\toutput = output.concat(generateParamsList(data[key], prefix ? prefix + \"[\" + key + \"]\" : key));\r\n\t\t}\r\n\t}else{\r\n\t\toutput.push({key:prefix, value:data});\r\n\t}\r\n\r\n\treturn output;\r\n}\r\n\r\nexport default {\r\n\t\"json\":{\r\n\t\theaders:{\r\n\t\t\t'Content-Type': 'application/json',\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\t\t\treturn JSON.stringify(params);\r\n\t\t},\r\n\t},\r\n\t\"form\":{\r\n\t\theaders:{\r\n\t\t},\r\n\t\tbody:function(url, config, params){\r\n\r\n\t\t\tvar output = generateParamsList(params),\r\n\t\t\tform = new FormData();\r\n\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tform.append(item.key, item.value);\r\n\t\t\t});\r\n\r\n\t\t\treturn form;\r\n\t\t},\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultConfig from './defaults/config.js';\r\nimport defaultURLGenerator from './defaults/urlGenerator.js';\r\nimport defaultLoaderPromise from './defaults/loaderPromise.js';\r\nimport defaultContentTypeFormatters from './defaults/contentTypeFormatters.js';\r\n\r\nclass Ajax extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.config = {}; //hold config object for ajax request\r\n\t\tthis.url = \"\"; //request URL\r\n\t\tthis.urlGenerator = false;\r\n\t\tthis.params = false; //request parameters\r\n\t\t\r\n\t\tthis.loaderPromise = false;\r\n\t\t\r\n\t\tthis.registerTableOption(\"ajaxURL\", false); //url for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxURLGenerator\", false);\r\n\t\tthis.registerTableOption(\"ajaxParams\", {}); //params for ajax loading\r\n\t\tthis.registerTableOption(\"ajaxConfig\", \"get\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxContentType\", \"form\"); //ajax request type\r\n\t\tthis.registerTableOption(\"ajaxRequestFunc\", false); //promise function\r\n\t\t\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\t\t\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\t\r\n\t//initialize setup options\r\n\tinitialize(){\r\n\t\tthis.loaderPromise = this.table.options.ajaxRequestFunc || Ajax.defaultLoaderPromise;\r\n\t\tthis.urlGenerator = this.table.options.ajaxURLGenerator || Ajax.defaultURLGenerator;\r\n\t\t\r\n\t\tif(this.table.options.ajaxURL){\r\n\t\t\tthis.setUrl(this.table.options.ajaxURL);\r\n\t\t}\r\n\r\n\r\n\t\tthis.setDefaultConfig(this.table.options.ajaxConfig);\r\n\t\t\r\n\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\t\t\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-params\", this.requestParams.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\t\r\n\trequestParams(data, config, silent, params){\r\n\t\tvar ajaxParams = this.table.options.ajaxParams;\r\n\t\t\r\n\t\tif(ajaxParams){\r\n\t\t\tif(typeof ajaxParams === \"function\"){\r\n\t\t\t\tajaxParams = ajaxParams.call(this.table);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tparams = Object.assign(params, ajaxParams);\r\n\t\t}\t\t\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\t\r\n\trequestData(url, params, config, silent, previousData){\r\n\t\tvar ajaxConfig;\r\n\t\t\r\n\t\tif(!previousData && this.requestDataCheck(url)){\r\n\t\t\tif(url){\r\n\t\t\t\tthis.setUrl(url);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tajaxConfig = this.generateConfig(config);\r\n\t\t\t\r\n\t\t\treturn this.sendRequest(this.url, params, ajaxConfig);\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetDefaultConfig(config = {}){\r\n\t\tthis.config = Object.assign({}, Ajax.defaultConfig);\r\n\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tthis.config.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(this.config, config);\r\n\t\t}\r\n\t}\r\n\t\r\n\t//load config object\r\n\tgenerateConfig(config = {}){\r\n\t\tvar ajaxConfig = Object.assign({}, this.config)\r\n\t\t\r\n\t\tif(typeof config == \"string\"){\r\n\t\t\tajaxConfig.method = config;\r\n\t\t}else{\r\n\t\t\tObject.assign(ajaxConfig, config);\r\n\t\t}\r\n\t\t\r\n\t\treturn ajaxConfig;\r\n\t}\r\n\t\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\t\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\t\r\n\t//send ajax request\r\n\tsendRequest(url, params, config){\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, url, params) !== false){\r\n\t\t\treturn this.loaderPromise(url, config, params)\r\n\t\t\t.then((data)=>{\r\n\t\t\t\tif(this.table.options.ajaxResponse){\r\n\t\t\t\t\tdata = this.table.options.ajaxResponse.call(this.table, url, params, data);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn data;\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n}\r\n\r\nAjax.moduleName = \"ajax\";\r\n\r\n//load defaults\r\nAjax.defaultConfig = defaultConfig;\r\nAjax.defaultURLGenerator = defaultURLGenerator;\r\nAjax.defaultLoaderPromise = defaultLoaderPromise;\r\nAjax.contentTypeFormatters = defaultContentTypeFormatters;\r\n\r\nexport default Ajax;","export default {\r\n\tmethod: \"GET\",\r\n};","export default function(url, config, params){\r\n\tvar contentType;\r\n\r\n\treturn new Promise((resolve, reject) => {\r\n\t\t//set url\r\n\t\turl = this.urlGenerator.call(this.table, url, config, params);\r\n\r\n\t\t//set body content if not GET request\r\n\t\tif(config.method.toUpperCase() != \"GET\"){\r\n\t\t\tcontentType = typeof this.table.options.ajaxContentType === \"object\" ? this.table.options.ajaxContentType : this.contentTypeFormatters[this.table.options.ajaxContentType];\r\n\t\t\tif(contentType){\r\n\r\n\t\t\t\tfor(var key in contentType.headers){\r\n\t\t\t\t\tif(!config.headers){\r\n\t\t\t\t\t\tconfig.headers = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof config.headers[key] === \"undefined\"){\r\n\t\t\t\t\t\tconfig.headers[key] = contentType.headers[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tconfig.body = contentType.body.call(this, url, config, params);\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Ajax Error - Invalid ajaxContentType value:\", this.table.options.ajaxContentType);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(url){\r\n\t\t\t//configure headers\r\n\t\t\tif(typeof config.headers === \"undefined\"){\r\n\t\t\t\tconfig.headers = {};\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers.Accept === \"undefined\"){\r\n\t\t\t\tconfig.headers.Accept = \"application/json\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.headers[\"X-Requested-With\"] === \"undefined\"){\r\n\t\t\t\tconfig.headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof config.mode === \"undefined\"){\r\n\t\t\t\tconfig.mode = \"cors\";\r\n\t\t\t}\r\n\r\n\t\t\tif(config.mode == \"cors\"){\r\n\t\t\t\tif(typeof config.headers[\"Origin\"] === \"undefined\"){\r\n\t\t\t\t\tconfig.headers[\"Origin\"] = window.location.origin;\r\n\t\t\t\t}\r\n \r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'same-origin';\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(typeof config.credentials === \"undefined\"){\r\n\t\t\t\t\tconfig.credentials = 'include';\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//send request\r\n\t\t\tfetch(url, config)\r\n\t\t\t.then((response)=>{\r\n\t\t\t\tif(response.ok) {\r\n\t\t\t\t\tresponse.json()\r\n\t\t\t\t\t.then((data)=>{\r\n\t\t\t\t\t\tresolve(data);\r\n\t\t\t\t\t}).catch((error)=>{\r\n\t\t\t\t\t\treject(error);\r\n\t\t\t\t\t\tconsole.warn(\"Ajax Load Error - Invalid JSON returned\", error);\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \" + response.status, response.statusText);\r\n\t\t\t\t\treject(response);\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t\t.catch((error)=>{\r\n\t\t\t\tconsole.error(\"Ajax Load Error - Connection Error: \", error);\r\n\t\t\t\treject(error);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Ajax Load Error - No URL Set\");\r\n\t\t\tresolve([]);\r\n\t\t}\r\n\t});\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPasteActions from './defaults/pasteActions.js';\r\nimport defaultPasteParsers from './defaults/pasteParsers.js';\r\n\r\nclass Clipboard extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = true;\r\n\t\tthis.pasteParser = function(){};\r\n\t\tthis.pasteAction = function(){};\r\n\t\tthis.customSelection = false;\r\n\t\tthis.rowRange = false;\r\n\t\tthis.blocked = true; //block copy actions not originating from this command\r\n\r\n\t\tthis.registerTableOption(\"clipboard\", false); //enable clipboard\r\n\t\tthis.registerTableOption(\"clipboardCopyStyled\", true); //formatted table data\r\n\t\tthis.registerTableOption(\"clipboardCopyConfig\", false); //clipboard config\r\n\t\tthis.registerTableOption(\"clipboardCopyFormatter\", false); //DEPRICATED - REMOVE in 5.0\r\n\t\tthis.registerTableOption(\"clipboardCopyRowRange\", \"active\"); //restrict clipboard to visible rows only\r\n\t\tthis.registerTableOption(\"clipboardPasteParser\", \"table\"); //convert pasted clipboard data to rows\r\n\t\tthis.registerTableOption(\"clipboardPasteAction\", \"insert\"); //how to insert pasted data into the table\r\n\r\n\t\tthis.registerColumnOption(\"clipboard\");\r\n\t\tthis.registerColumnOption(\"titleClipboard\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.mode = this.table.options.clipboard;\r\n\r\n\t\tthis.rowRange = this.table.options.clipboardCopyRowRange;\r\n\r\n\t\tif(this.mode === true || this.mode === \"copy\"){\r\n\t\t\tthis.table.element.addEventListener(\"copy\", (e) => {\r\n\t\t\t\tvar plain, html, list;\r\n\r\n\t\t\t\tif(!this.blocked){\r\n\t\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\t\tif(this.customSelection){\r\n\t\t\t\t\t\tplain = this.customSelection;\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\r\n\t\t\t\t\t\tvar list = this.table.modules.export.generateExportList(this.table.options.clipboardCopyConfig, this.table.options.clipboardCopyStyled, this.rowRange, \"clipboard\");\r\n\r\n\t\t\t\t\t\thtml = this.table.modules.export.genereateHTMLTable(list);\r\n\t\t\t\t\t\tplain = html ? this.generatePlainContent(list) : \"\";\r\n\r\n\t\t\t\t\t\tif(this.table.options.clipboardCopyFormatter){\r\n\t\t\t\t\t\t\tplain = this.table.options.clipboardCopyFormatter(\"plain\", plain);\r\n\t\t\t\t\t\t\thtml = this.table.options.clipboardCopyFormatter(\"html\", html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (window.clipboardData && window.clipboardData.setData) {\r\n\t\t\t\t\t\twindow.clipboardData.setData('Text', plain);\r\n\t\t\t\t\t} else if (e.clipboardData && e.clipboardData.setData) {\r\n\t\t\t\t\t\te.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.setData) {\r\n\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/plain', plain);\r\n\t\t\t\t\t\tif(html){\r\n\t\t\t\t\t\t\te.originalEvent.clipboardData.setData('text/html', html);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.dispatchExternal(\"clipboardCopied\", plain, html);\r\n\r\n\t\t\t\t\tthis.reset();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.mode === true || this.mode === \"paste\"){\r\n\t\t\tthis.table.element.addEventListener(\"paste\", (e) => {\r\n\t\t\t\tthis.paste(e);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.setPasteParser(this.table.options.clipboardPasteParser);\r\n\t\tthis.setPasteAction(this.table.options.clipboardPasteAction);\r\n\r\n\t\tthis.registerTableFunction(\"copyToClipboard\", this.copy.bind(this));\r\n\t}\r\n\r\n\treset(){\r\n\t\tthis.blocked = true;\r\n\t\tthis.customSelection = false;\r\n\t}\r\n\r\n\tgeneratePlainContent (list) {\r\n\t\tvar output = [];\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tvar value = \"\";\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tif(row.type === \"group\"){\r\n\t\t\t\t\t\tcol.value = col.component.getKey();\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(col.value === null){\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\t\tvalue = JSON.stringify(col.value);\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tvalue = col.value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput.push(rowData.join(\"\\t\"));\r\n\t\t});\r\n\r\n\t\treturn output.join(\"\\n\");\r\n\t}\r\n\r\n\tcopy (range, internal) {\r\n\t\tvar range, sel, textRange;\r\n\t\tthis.blocked = false;\r\n\t\tthis.customSelection = false;\r\n\r\n\t\tif (this.mode === true || this.mode === \"copy\") {\r\n\r\n\t\t\tthis.rowRange = range || this.table.options.clipboardCopyRowRange;\r\n\r\n\t\t\tif (typeof window.getSelection != \"undefined\" && typeof document.createRange != \"undefined\") {\r\n\t\t\t\trange = document.createRange();\r\n\t\t\t\trange.selectNodeContents(this.table.element);\r\n\t\t\t\tsel = window.getSelection();\r\n\r\n\t\t\t\tif (sel.toString() && internal) {\r\n\t\t\t\t\tthis.customSelection = sel.toString();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t\tsel.addRange(range);\r\n\t\t\t} else if (typeof document.selection != \"undefined\" && typeof document.body.createTextRange != \"undefined\") {\r\n\t\t\t\ttextRange = document.body.createTextRange();\r\n\t\t\t\ttextRange.moveToElementText(this.table.element);\r\n\t\t\t\ttextRange.select();\r\n\t\t\t}\r\n\r\n\t\t\tdocument.execCommand('copy');\r\n\r\n\t\t\tif (sel) {\r\n\t\t\t\tsel.removeAllRanges();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//PASTE EVENT HANDLING\r\n\tsetPasteAction(action){\r\n\r\n\t\tswitch(typeof action){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteAction = Clipboard.pasteActions[action];\r\n\r\n\t\t\tif(!this.pasteAction){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste action found:\", action);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteAction = action;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tsetPasteParser(parser){\r\n\t\tswitch(typeof parser){\r\n\t\t\tcase \"string\":\r\n\t\t\tthis.pasteParser = Clipboard.pasteParsers[parser];\r\n\r\n\t\t\tif(!this.pasteParser){\r\n\t\t\t\tconsole.warn(\"Clipboard Error - No such paste parser found:\", parser);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tthis.pasteParser = parser;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tpaste(e){\r\n\t\tvar data, rowData, rows;\r\n\r\n\t\tif(this.checkPaseOrigin(e)){\r\n\r\n\t\t\tdata = this.getPasteData(e);\r\n\r\n\t\t\trowData = this.pasteParser.call(this, data);\r\n\r\n\t\t\tif(rowData){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\t\t\trowData = this.mutateData(rowData);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trows = this.pasteAction.call(this, rowData);\r\n\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasted\", data, rowData, rows);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"clipboardPasteError\", data);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmutateData(data){\r\n\t\tvar output = [];\r\n\r\n\t\tif(Array.isArray(data)){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\toutput.push(this.table.modules.mutator.transformRow(row, \"clipboard\"));\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\toutput = data;\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\r\n\tcheckPaseOrigin(e){\r\n\t\tvar valid = true;\r\n\r\n\t\tif(e.target.tagName != \"DIV\" || this.table.modules.edit.currentCell){\r\n\t\t\tvalid = false;\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetPasteData(e){\r\n\t\tvar data;\r\n\r\n\t\tif (window.clipboardData && window.clipboardData.getData) {\r\n\t\t\tdata = window.clipboardData.getData('Text');\r\n\t\t} else if (e.clipboardData && e.clipboardData.getData) {\r\n\t\t\tdata = e.clipboardData.getData('text/plain');\r\n\t\t} else if (e.originalEvent && e.originalEvent.clipboardData.getData) {\r\n\t\t\tdata = e.originalEvent.clipboardData.getData('text/plain');\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n}\r\n\r\nClipboard.moduleName = \"clipboard\";\r\n\r\n//load defaults\r\nClipboard.pasteActions = defaultPasteActions;\r\nClipboard.pasteParsers = defaultPasteParsers;\r\n\r\nexport default Clipboard;","export default {\r\n\treplace:function(rows){\r\n\t\treturn this.table.setData(rows);\r\n\t},\r\n\tupdate:function(rows){\r\n\t\treturn this.table.updateOrAddData(rows);\r\n\t},\r\n\tinsert:function(rows){\r\n\t\treturn this.table.addData(rows);\r\n\t},\r\n};","export default {\r\n\ttable:function(clipboard){\r\n\t\tvar data = [],\r\n\t\tsuccess = false,\r\n\t\theaderFindSuccess = true,\r\n\t\tcolumns = this.table.columnManager.columns,\r\n\t\tcolumnMap = [],\r\n\t\trows = [];\r\n\r\n\t\t//get data from clipboard into array of columns and rows.\r\n\t\tclipboard = clipboard.split(\"\\n\");\r\n\r\n\t\tclipboard.forEach(function(row){\r\n\t\t\tdata.push(row.split(\"\\t\"));\r\n\t\t});\r\n\r\n\t\tif(data.length && !(data.length === 1 && data[0].length < 2)){\r\n\t\t\tsuccess = true;\r\n\r\n\t\t\t//check if headers are present by title\r\n\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\treturn value && column.definition.title && value.trim() && column.definition.title.trim() === value.trim();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\t//check if column headers are present by field\r\n\t\t\tif(!headerFindSuccess){\r\n\t\t\t\theaderFindSuccess = true;\r\n\t\t\t\tcolumnMap = [];\r\n\r\n\t\t\t\tdata[0].forEach(function(value){\r\n\t\t\t\t\tvar column = columns.find(function(column){\r\n\t\t\t\t\t\treturn value && column.field && value.trim() && column.field.trim() === value.trim();\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tcolumnMap.push(column);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\theaderFindSuccess = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(!headerFindSuccess){\r\n\t\t\t\t\tcolumnMap = this.table.columnManager.columnsByIndex;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//remove header row if found\r\n\t\t\tif(headerFindSuccess){\r\n\t\t\t\tdata.shift();\r\n\t\t\t}\r\n\r\n\t\t\tdata.forEach(function(item){\r\n\t\t\t\tvar row = {};\r\n\r\n\t\t\t\titem.forEach(function(value, i){\r\n\t\t\t\t\tif(columnMap[i]){\r\n\t\t\t\t\t\trow[columnMap[i].field] = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\trows.push(row);\r\n\t\t\t});\r\n\r\n\t\t\treturn rows;\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n};","class CalcComponent{\r\n\tconstructor (row){\r\n\t\tthis._row = row;\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._row.table.componentFunctionBinder.handle(\"row\", target._row, name)\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t})\r\n\t}\r\n\r\n\tgetData(transform){\r\n\t\treturn this._row.getData(transform);\r\n\t}\r\n\r\n\tgetElement(){\r\n\t\treturn this._row.getElement();\r\n\t}\r\n\r\n\tgetTable(){\r\n\t\treturn this._row.table;\r\n\t}\r\n\r\n\tgetCells(){\r\n\t\tvar cells = [];\r\n\r\n\t\tthis._row.getCells().forEach(function(cell){\r\n\t\t\tcells.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn cells;\r\n\t}\r\n\r\n\tgetCell(column){\r\n\t\tvar cell = this._row.getCell(column);\r\n\t\treturn cell ? cell.getComponent() : false;\r\n\t}\r\n\r\n\t_getSelf(){\r\n\t\treturn this._row;\r\n\t}\r\n}\r\n\r\nexport default CalcComponent;","export default {\r\n\t\"avg\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : 2\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn Number(sum) + Number(value);\r\n\t\t\t});\r\n\r\n\t\t\toutput = output / values.length;\r\n\r\n\t\t\toutput = precision !== false ? output.toFixed(precision) : output;\r\n\t\t}\r\n\r\n\t\treturn parseFloat(output).toString();\r\n\t},\r\n\t\"max\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value > output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"min\":function(values, data, calcParams){\r\n\t\tvar output = null,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tvalues.forEach(function(value){\r\n\r\n\t\t\tvalue = Number(value);\r\n\r\n\t\t\tif(value < output || output === null){\r\n\t\t\t\toutput = value;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output !== null ? (precision !== false ? output.toFixed(precision) : output) : \"\";\r\n\t},\r\n\t\"sum\":function(values, data, calcParams){\r\n\t\tvar output = 0,\r\n\t\tprecision = typeof calcParams.precision !== \"undefined\" ? calcParams.precision : false;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tvalue = Number(value);\r\n\r\n\t\t\t\toutput += !isNaN(value) ? Number(value) : 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn precision !== false ? output.toFixed(precision) : output;\r\n\t},\r\n\t\"concat\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\toutput = values.reduce(function(sum, value){\r\n\t\t\t\treturn String(sum) + String(value);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n\t\"count\":function(values, data, calcParams){\r\n\t\tvar output = 0;\r\n\r\n\t\tif(values.length){\r\n\t\t\tvalues.forEach(function(value){\r\n\t\t\t\tif(value){\r\n\t\t\t\t\toutput ++;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport CalcComponent from './CalcComponent.js';\r\n\r\nimport Cell from '../../core/cell/Cell.js';\r\nimport Column from '../../core/column/Column.js';\r\nimport Row from '../../core/row/Row.js';\r\n\r\nimport defaultCalculations from './defaults/calculations.js';\r\n\r\nclass ColumnCalcs extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topCalcs = [];\r\n\t\tthis.botCalcs = [];\r\n\t\tthis.genColumn = false;\r\n\t\tthis.topElement = this.createElement();\r\n\t\tthis.botElement = this.createElement();\r\n\t\tthis.topRow = false;\r\n\t\tthis.botRow = false;\r\n\t\tthis.topInitialized = false;\r\n\t\tthis.botInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"columnCalcs\", true);\r\n\r\n\t\tthis.registerColumnOption(\"topCalc\");\r\n\t\tthis.registerColumnOption(\"topCalcParams\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"topCalcFormatterParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalc\");\r\n\t\tthis.registerColumnOption(\"bottomCalcParams\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatter\");\r\n\t\tthis.registerColumnOption(\"bottomCalcFormatterParams\");\r\n\t}\r\n\r\n\tcreateElement (){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\tel.classList.add(\"tabulator-calcs-holder\");\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.genColumn = new Column({field:\"value\"}, this);\r\n\r\n\t\tthis.subscribe(\"cell-value-changed\", this.cellValueChanged.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"row-added\", this.rowsUpdated.bind(this));\r\n\t\tthis.subscribe(\"column-moved\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"column-add\", this.recalcActiveRows.bind(this));\r\n\t\tthis.subscribe(\"data-refreshed\", this.recalcActiveRows.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\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\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\r\n\t\t\t}else{\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(column.definition.topCalc || column.definition.bottomCalc){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column calcs\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition\r\n\r\n\t\tvar config = {\r\n\t\t\ttopCalcParams:def.topCalcParams || {},\r\n\t\t\tbotCalcParams:def.bottomCalcParams || {},\r\n\t\t};\r\n\r\n\t\tif(def.topCalc){\r\n\r\n\t\t\tswitch(typeof def.topCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.topCalc]){\r\n\t\t\t\t\tconfig.topCalc = ColumnCalcs.calculations[def.topCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.topCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.topCalc = def.topCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.topCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.topCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeTopRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}\r\n\r\n\t\tif(def.bottomCalc){\r\n\t\t\tswitch(typeof def.bottomCalc){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(ColumnCalcs.calculations[def.bottomCalc]){\r\n\t\t\t\t\tconfig.botCalc = ColumnCalcs.calculations[def.bottomCalc]\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Calc Error - No such calculation found, ignoring: \", def.bottomCalc);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tconfig.botCalc = def.bottomCalc;\r\n\t\t\t\tbreak\r\n\r\n\t\t\t}\r\n\r\n\t\t\tif(config.botCalc){\r\n\t\t\t\tcolumn.modules.columnCalcs = config;\r\n\t\t\t\tthis.botCalcs.push(column);\r\n\r\n\t\t\t\tif(this.table.options.columnCalcs != \"group\"){\r\n\t\t\t\t\tthis.initializeBottomRow();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//dummy functions to handle being mock column manager\r\n\tregisterColumnField(){};\r\n\r\n\tremoveCalcs(){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(this.topInitialized){\r\n\t\t\tthis.topInitialized = false;\r\n\t\t\tthis.topElement.parentNode.removeChild(this.topElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(this.botInitialized){\r\n\t\t\tthis.botInitialized = false;\r\n\t\t\tthis.table.footerManager.remove(this.botElement);\r\n\t\t\tchanged = true;\r\n\t\t}\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeTopRow(){\r\n\t\tif(!this.topInitialized){\r\n\t\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\t\t\tthis.topInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeBottomRow(){\r\n\t\tif(!this.botInitialized){\r\n\t\t\tthis.table.footerManager.prepend(this.botElement);\r\n\t\t\tthis.botInitialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tscrollHorizontal(left){\r\n\t\tif(this.botInitialized && this.botRow){\r\n\t\t\tthis.botRow.getElement().style.marginLeft = (-left) + \"px\";\r\n\t\t}\r\n\t}\r\n\r\n\trecalc(rows){\r\n\t\tvar data, row;\r\n\r\n\t\tif(this.topInitialized || this.botInitialized){\r\n\t\t\tdata = this.rowsToData(rows);\r\n\r\n\t\t\tif(this.topInitialized){\r\n\t\t\t\tif(this.topRow){\r\n\t\t\t\t\tthis.topRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"top\", this.rowsToData(rows))\r\n\t\t\t\tthis.topRow = row;\r\n\t\t\t\twhile(this.topElement.firstChild) this.topElement.removeChild(this.topElement.firstChild);\r\n\t\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.botInitialized){\r\n\t\t\t\tif(this.botRow){\r\n\t\t\t\t\tthis.botRow.deleteCells();\r\n\t\t\t\t}\r\n\r\n\t\t\t\trow = this.generateRow(\"bottom\", this.rowsToData(rows))\r\n\t\t\t\tthis.botRow = row;\r\n\t\t\t\twhile(this.botElement.firstChild) this.botElement.removeChild(this.botElement.firstChild);\r\n\t\t\t\tthis.botElement.appendChild(row.getElement());\r\n\t\t\t\trow.initialize(true);\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\t//set resizable handles\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tthis.table.modules.frozenColumns.layout();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trecalcRowGroup(row){\r\n\t\tthis.recalcGroup(this.table.modules.groupRows.getRowGroup(row));\r\n\t}\r\n\r\n\trecalcAll(){\r\n\t\tif(this.topCalcs.length || this.botCalcs.length){\r\n\t\t\tif(this.table.options.columnCalcs !== \"group\"){\r\n\t\t\t\tthis.recalcActiveRows();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.groupBy && this.table.options.columnCalcs !== \"table\"){\r\n\r\n\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\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.open){\r\n\t\t\t\t\tvar children = this.rowsToData(this.table.modules.dataTree.getFilteredTreeChildren(row));\r\n\t\t\t\t\tdata = data.concat(children);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRow(pos, data){\r\n\t\tvar rowData = this.generateRowData(pos, data),\r\n\t\trow;\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.disable();\r\n\t\t}\r\n\r\n\t\trow = new Row(rowData, this, \"calc\");\r\n\r\n\t\tif(this.table.modExists(\"mutator\")){\r\n\t\t\tthis.table.modules.mutator.enable();\r\n\t\t}\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-calcs\", \"tabulator-calcs-\" + pos);\r\n\r\n\t\trow.component = false;\r\n\r\n\t\trow.getComponent = () => {\r\n\t\t\tif(!row.component){\r\n\t\t\t\trow.component = new CalcComponent(row);\r\n\t\t\t}\r\n\r\n\t\t\treturn row.component;\r\n\t\t};\r\n\r\n\t\trow.generateCells = () => {\r\n\r\n\t\t\tvar cells = [];\r\n\r\n\t\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\r\n\t\t\t\t\t//set field name of mock column\r\n\t\t\t\t\tthis.genColumn.setField(column.getField());\r\n\t\t\t\t\tthis.genColumn.hozAlign = column.hozAlign;\r\n\r\n\t\t\t\t\tif(column.definition[pos + \"CalcFormatter\"] && this.table.modExists(\"format\")){\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(column.definition[pos + \"CalcFormatter\"]),\r\n\t\t\t\t\t\t\tparams: column.definition[pos + \"CalcFormatterParams\"] || {},\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.genColumn.modules.format = {\r\n\t\t\t\t\t\t\tformatter: this.table.modules.format.getFormatter(\"plaintext\"),\r\n\t\t\t\t\t\t\tparams:{}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//ensure css class defintion is replicated to calculation cell\r\n\t\t\t\t\tthis.genColumn.definition.cssClass = column.definition.cssClass;\r\n\r\n\t\t\t\t\t//generate cell and assign to correct column\r\n\t\t\t\t\tvar cell = new Cell(this.genColumn, row);\r\n\t\t\t\t\tcell.getElement();\r\n\t\t\t\t\tcell.column = column;\r\n\t\t\t\t\tcell.setWidth();\r\n\r\n\t\t\t\t\tcolumn.cells.push(cell);\r\n\t\t\t\t\tcells.push(cell);\r\n\r\n\t\t\t\t\tif(!column.visible){\r\n\t\t\t\t\t\tcell.hide();\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\trow.cells = cells;\r\n\t\t};\r\n\r\n\t\treturn row;\r\n\t}\r\n\r\n\t//generate stats row\r\n\tgenerateRowData(pos, data){\r\n\t\tvar rowData = {},\r\n\t\tcalcs = pos == \"top\" ? this.topCalcs : this.botCalcs,\r\n\t\ttype = pos == \"top\" ? \"topCalc\" : \"botCalc\",\r\n\t\tparams, paramKey;\r\n\r\n\t\tcalcs.forEach(function(column){\r\n\t\t\tvar values = [];\r\n\r\n\t\t\tif(column.modules.columnCalcs && column.modules.columnCalcs[type]){\r\n\t\t\t\tdata.forEach(function(item){\r\n\t\t\t\t\tvalues.push(column.getFieldValue(item));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tparamKey = type + \"Params\";\r\n\t\t\t\tparams = typeof column.modules.columnCalcs[paramKey] === \"function\" ? column.modules.columnCalcs[paramKey](values, data) : column.modules.columnCalcs[paramKey];\r\n\r\n\t\t\t\tcolumn.setFieldValue(rowData, column.modules.columnCalcs[type](values, data, params));\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\thasTopCalcs(){\r\n\t\treturn\t!!(this.topCalcs.length);\r\n\t}\r\n\r\n\thasBottomCalcs(){\r\n\t\treturn\t!!(this.botCalcs.length);\r\n\t}\r\n\r\n\t//handle table redraw\r\n\tredraw(){\r\n\t\tif(this.topRow){\r\n\t\t\tthis.topRow.normalizeHeight(true);\r\n\t\t}\r\n\t\tif(this.botRow){\r\n\t\t\tthis.botRow.normalizeHeight(true);\r\n\t\t}\r\n\t}\r\n\r\n\t//return the calculated\r\n\tgetResults(){\r\n\t\tvar results = {},\r\n\t\tgroups;\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tgroups = this.table.modules.groupRows.getGroups(true);\r\n\r\n\t\t\tgroups.forEach((group) => {\r\n\t\t\t\tresults[group.getKey()] = this.getGroupResults(group);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tresults = {\r\n\t\t\t\ttop: this.topRow ? this.topRow.getData() : {},\r\n\t\t\t\tbottom: this.botRow ? this.botRow.getData() : {},\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n\r\n\t//get results from a group\r\n\tgetGroupResults(group){\r\n\t\tvar groupObj = group._getSelf(),\r\n\t\tsubGroups = group.getSubGroups(),\r\n\t\tsubGroupResults = {},\r\n\t\tresults = {};\r\n\r\n\t\tsubGroups.forEach((subgroup) => {\r\n\t\t\tsubGroupResults[subgroup.getKey()] = this.getGroupResults(subgroup);\r\n\t\t});\r\n\r\n\t\tresults = {\r\n\t\t\ttop: groupObj.calcs.top ? groupObj.calcs.top.getData() : {},\r\n\t\t\tbottom: groupObj.calcs.bottom ? groupObj.calcs.bottom.getData() : {},\r\n\t\t\tgroups: subGroupResults,\r\n\t\t}\r\n\r\n\t\treturn results;\r\n\t}\r\n}\r\n\r\nColumnCalcs.moduleName = \"columnCalcs\";\r\n\r\n//load defaults\r\nColumnCalcs.calculations = defaultCalculations;\r\n\r\nexport default ColumnCalcs;","import Module from '../../core/Module.js';\r\n\r\nimport Row from '../../core/row/Row.js';\r\n\r\nclass DataTree extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.indent = 10;\r\n\t\tthis.field = \"\";\r\n\t\tthis.collapseEl = null;\r\n\t\tthis.expandEl = null;\r\n\t\tthis.branchEl = null;\r\n\t\tthis.elementField = false;\r\n\r\n\t\tthis.startOpen = function(){};\r\n\r\n\t\tthis.displayIndex = 0;\r\n\r\n\t\tthis.registerTableOption(\"dataTree\", false); //enable data tree\r\n\t\tthis.registerTableOption(\"dataTreeFilter\", true); //filter child rows\r\n\t\tthis.registerTableOption(\"dataTreeSort\", true); //sort child rows\r\n\t\tthis.registerTableOption(\"dataTreeElementColumn\", false);\r\n\t\tthis.registerTableOption(\"dataTreeBranchElement\", true);//show data tree branch element\r\n\t\tthis.registerTableOption(\"dataTreeChildIndent\", 9); //data tree child indent in px\r\n\t\tthis.registerTableOption(\"dataTreeChildField\", \"_children\");//data tre column field to look for child rows\r\n\t\tthis.registerTableOption(\"dataTreeCollapseElement\", false);//data tree row collapse element\r\n\t\tthis.registerTableOption(\"dataTreeExpandElement\", false);//data tree row expand element\r\n\t\tthis.registerTableOption(\"dataTreeStartExpanded\", false);\r\n\t\tthis.registerTableOption(\"dataTreeChildColumnCalcs\", false);//include visible data tree rows in column calculations\r\n\t\tthis.registerTableOption(\"dataTreeSelectPropagate\", false);//seleccting a parent row selects its children\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"treeCollapse\", this.collapseRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeExpand\", this.expandRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"treeToggle\", this.toggleRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeParent\", this.getTreeParent.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"getTreeChildren\", this.getRowChildren.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"addTreeChild\", this.addTreeChildRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isTreeExpanded\", this.isRowExpanded.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tvar dummyEl = null,\r\n\t\t\toptions = this.table.options;\r\n\r\n\t\t\tthis.field = options.dataTreeChildField;\r\n\t\t\tthis.indent = options.dataTreeChildIndent;\r\n\r\n\t\t\tif(options.dataTreeBranchElement){\r\n\r\n\t\t\t\tif(options.dataTreeBranchElement === true){\r\n\t\t\t\t\tthis.branchEl = document.createElement(\"div\");\r\n\t\t\t\t\tthis.branchEl.classList.add(\"tabulator-data-tree-branch\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(typeof options.dataTreeBranchElement === \"string\"){\r\n\t\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\t\tdummyEl.innerHTML = options.dataTreeBranchElement;\r\n\t\t\t\t\t\tthis.branchEl = dummyEl.firstChild;\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.branchEl = options.dataTreeBranchElement;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeCollapseElement){\r\n\t\t\t\tif(typeof options.dataTreeCollapseElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeCollapseElement;\r\n\t\t\t\t\tthis.collapseEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.collapseEl = options.dataTreeCollapseElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.collapseEl = document.createElement(\"div\");\r\n\t\t\t\tthis.collapseEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.collapseEl.tabIndex = 0;\r\n\t\t\t\tthis.collapseEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\t\t\tif(options.dataTreeExpandElement){\r\n\t\t\t\tif(typeof options.dataTreeExpandElement === \"string\"){\r\n\t\t\t\t\tdummyEl = document.createElement(\"div\");\r\n\t\t\t\t\tdummyEl.innerHTML = options.dataTreeExpandElement;\r\n\t\t\t\t\tthis.expandEl = dummyEl.firstChild;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.expandEl = options.dataTreeExpandElement;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandEl = document.createElement(\"div\");\r\n\t\t\t\tthis.expandEl.classList.add(\"tabulator-data-tree-control\");\r\n\t\t\t\tthis.expandEl.tabIndex = 0;\r\n\t\t\t\tthis.expandEl.innerHTML = \"
\";\r\n\t\t\t}\r\n\r\n\r\n\t\t\tswitch(typeof options.dataTreeStartExpanded){\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded;\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tthis.startOpen = options.dataTreeStartExpanded;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.startOpen = function(row, index){\r\n\t\t\t\t\treturn options.dataTreeStartExpanded[index];\r\n\t\t\t\t};\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowDelete.bind(this),0);\r\n\t\t\tthis.subscribe(\"row-data-changed\", this.rowDataChanged.bind(this), 10);\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"edit-cancelled\", this.cellValueChanged.bind(this));\r\n\t\t\tthis.subscribe(\"column-moving-rows\", this.columnMoving.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.initializeElementField.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 30);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeElementField(){\r\n\t\tvar firstCol = this.table.columnManager.getFirstVisibleColumn();\r\n\r\n\t\tthis.elementField = this.table.options.dataTreeElementColumn || (firstCol ? firstCol.field : false);\r\n\t}\r\n\t\r\n\tgetRowChildren(row){\r\n\t\treturn this.getTreeChildren(row, true);\r\n\t}\r\n\r\n\tcolumnMoving(){\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trows = rows.concat(this.getTreeChildren(row, false, true));\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowDataChanged(row, visible, updatedData){\r\n\t\tif(this.redrawNeeded(updatedData)){\r\n\t\t\tthis.initializeRow(row);\r\n\r\n\t\t\tif(visible){\r\n\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tcellValueChanged(cell){\r\n\t\tvar field = cell.column.getField();\r\n\r\n\t\tif(field === this.elementField){\r\n\t\t\tthis.layoutRow(cell.row);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar childArray = row.getData()[this.field];\r\n\t\tvar isArray = Array.isArray(childArray);\r\n\r\n\t\tvar children = isArray || (!isArray && typeof childArray === \"object\" && childArray !== null);\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.branchEl){\r\n\t\t\trow.modules.dataTree.branchEl.parentNode.removeChild(row.modules.dataTree.branchEl);\r\n\t\t}\r\n\r\n\t\tif(!children && row.modules.dataTree && row.modules.dataTree.controlEl){\r\n\t\t\trow.modules.dataTree.controlEl.parentNode.removeChild(row.modules.dataTree.controlEl);\r\n\t\t}\r\n\r\n\t\trow.modules.dataTree = {\r\n\t\t\tindex: row.modules.dataTree ? row.modules.dataTree.index : 0,\r\n\t\t\topen: children ? (row.modules.dataTree ? row.modules.dataTree.open : this.startOpen(row.getComponent(), 0)) : false,\r\n\t\t\tcontrolEl: row.modules.dataTree && children ? row.modules.dataTree.controlEl : false,\r\n\t\t\tbranchEl: row.modules.dataTree && children ? row.modules.dataTree.branchEl : false,\r\n\t\t\tparent: row.modules.dataTree ? row.modules.dataTree.parent : false,\r\n\t\t\tchildren:children,\r\n\t\t};\r\n\t}\r\n\r\n\treinitializeRowChildren(row){\r\n\t\tvar children = this.getTreeChildren(row, false, true);\r\n\r\n\t\tchildren.forEach(function(child){\r\n\t\t\tchild.reinitialize(true);\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar cell = this.elementField ? row.getCell(this.elementField) : row.getCells()[0],\r\n\t\tel = cell.getElement(),\r\n\t\tconfig = row.modules.dataTree;\r\n\r\n\t\tif(config.branchEl){\r\n\t\t\tif(config.branchEl.parentNode){\r\n\t\t\t\tconfig.branchEl.parentNode.removeChild(config.branchEl);\r\n\t\t\t}\r\n\t\t\tconfig.branchEl = false;\r\n\t\t}\r\n\r\n\t\tif(config.controlEl){\r\n\t\t\tif(config.controlEl.parentNode){\r\n\t\t\t\tconfig.controlEl.parentNode.removeChild(config.controlEl);\r\n\t\t\t}\r\n\t\t\tconfig.controlEl = false;\r\n\t\t}\r\n\r\n\t\tthis.generateControlElement(row, el);\r\n\r\n\t\trow.getElement().classList.add(\"tabulator-tree-level-\" + config.index);\r\n\r\n\t\tif(config.index){\r\n\t\t\tif(this.branchEl){\r\n\t\t\t\tconfig.branchEl = this.branchEl.cloneNode(true);\r\n\t\t\t\tel.insertBefore(config.branchEl, el.firstChild);\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tconfig.branchEl.style.marginRight = (((config.branchEl.offsetWidth + config.branchEl.style.marginLeft) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconfig.branchEl.style.marginLeft = (((config.branchEl.offsetWidth + config.branchEl.style.marginRight) * (config.index - 1)) + (config.index * this.indent)) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\r\n\t\t\t\tif(this.table.rtl){\r\n\t\t\t\t\tel.style.paddingRight = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-right')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.style.paddingLeft = parseInt(window.getComputedStyle(el, null).getPropertyValue('padding-left')) + (config.index * this.indent) + \"px\";\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateControlElement(row, el){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tel = el || row.getCells()[0].getElement(),\r\n\t\toldControl = config.controlEl;\r\n\r\n\t\tif(config.children !== false){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tconfig.controlEl = this.collapseEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.collapseRow(row);\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tconfig.controlEl = this.expandEl.cloneNode(true);\r\n\t\t\t\tconfig.controlEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tthis.expandRow(row);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tconfig.controlEl.addEventListener(\"mousedown\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tif(oldControl && oldControl.parentNode === el){\r\n\t\t\t\toldControl.parentNode.replaceChild(config.controlEl,oldControl);\r\n\t\t\t}else{\r\n\t\t\t\tel.insertBefore(config.controlEl, el.firstChild);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tsetDisplayIndex (index) {\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex () {\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\tgetRows(rows){\r\n\t\tvar output = [];\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar config, children;\r\n\r\n\t\t\toutput.push(row);\r\n\r\n\t\t\tif(row instanceof Row){\r\n\r\n\t\t\t\trow.create();\r\n\r\n\t\t\t\tconfig = row.modules.dataTree.children;\r\n\r\n\t\t\t\tif(!config.index && config.children !== false){\r\n\t\t\t\t\tchildren = this.getChildren(row);\r\n\r\n\t\t\t\t\tchildren.forEach((child) => {\r\n\t\t\t\t\t\tchild.create();\r\n\t\t\t\t\t\toutput.push(child);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildren(row, allChildren){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\tchildren = [],\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children !== false && (config.open || allChildren)){\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"sort\") && this.table.options.dataTreeSort){\r\n\t\t\t\tthis.table.modules.sort.sort(children);\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((child) => {\r\n\t\t\t\toutput.push(child);\r\n\r\n\t\t\t\tvar subChildren = this.getChildren(child);\r\n\r\n\t\t\t\tsubChildren.forEach((sub) => {\r\n\t\t\t\t\toutput.push(sub);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateChildren(row){\r\n\t\tvar children = [];\r\n\r\n\t\tvar childArray = row.getData()[this.field];\r\n\r\n\t\tif(!Array.isArray(childArray)){\r\n\t\t\tchildArray = [childArray];\r\n\t\t}\r\n\r\n\t\tchildArray.forEach((childData) => {\r\n\t\t\tvar childRow = new Row(childData || {}, this.table.rowManager);\r\n\r\n\t\t\tchildRow.create();\r\n\r\n\t\t\tchildRow.modules.dataTree.index = row.modules.dataTree.index + 1;\r\n\t\t\tchildRow.modules.dataTree.parent = row;\r\n\r\n\t\t\tif(childRow.modules.dataTree.children){\r\n\t\t\t\tchildRow.modules.dataTree.open = this.startOpen(childRow.getComponent(), childRow.modules.dataTree.index);\r\n\t\t\t}\r\n\t\t\tchildren.push(childRow);\r\n\t\t});\r\n\r\n\t\treturn children;\r\n\t}\r\n\r\n\texpandRow(row, silent){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = true;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowExpanded\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\tcollapseRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tconfig.open = false;\r\n\r\n\t\t\trow.reinitialize();\r\n\r\n\t\t\tthis.refreshData(true);\r\n\r\n\t\t\tthis.dispatchExternal(\"dataTreeRowCollapsed\", row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\t}\r\n\r\n\ttoggleRow(row){\r\n\t\tvar config = row.modules.dataTree;\r\n\r\n\t\tif(config.children !== false){\r\n\t\t\tif(config.open){\r\n\t\t\t\tthis.collapseRow(row);\r\n\t\t\t}else{\r\n\t\t\t\tthis.expandRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tisRowExpanded(row){\r\n\t\treturn row.modules.dataTree.open;\r\n\t}\r\n\r\n\tgetTreeParent(row){\r\n\t\treturn row.modules.dataTree.parent ? row.modules.dataTree.parent.getComponent() : false;\r\n\t}\r\n\r\n\tgetFilteredTreeChildren(row){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [], children;\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"filter\") && this.table.options.dataTreeFilter){\r\n\t\t\t\tchildren = this.table.modules.filter.filter(config.children);\r\n\t\t\t}else{\r\n\t\t\t\tchildren = config.children;\r\n\t\t\t}\r\n\r\n\t\t\tchildren.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(childRow);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\trowDelete(row){\r\n\t\tvar parent = row.modules.dataTree.parent,\r\n\t\tchildIndex;\r\n\r\n\t\tif(parent){\r\n\t\t\tchildIndex = this.findChildIndex(row, parent);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\tparent.data[this.field].splice(childIndex, 1);\r\n\t\t\t}\r\n\r\n\t\t\tif(!parent.data[this.field].length){\r\n\t\t\t\tdelete parent.data[this.field];\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeRow(parent);\r\n\t\t\tthis.layoutRow(parent);\r\n\t\t}\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\taddTreeChildRow(row, data, top, index){\r\n\t\tvar childIndex = false;\r\n\r\n\t\tif(typeof data === \"string\"){\r\n\t\t\tdata = JSON.parse(data);\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(row.data[this.field])){\r\n\t\t\trow.data[this.field] = [];\r\n\r\n\t\t\trow.modules.dataTree.open = this.startOpen(row.getComponent(), row.modules.dataTree.index);\r\n\t\t}\r\n\r\n\t\tif(typeof index !== \"undefined\"){\r\n\t\t\tchildIndex = this.findChildIndex(index, row);\r\n\r\n\t\t\tif(childIndex !== false){\r\n\t\t\t\trow.data[this.field].splice((top ? childIndex : childIndex + 1), 0, data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(childIndex === false){\r\n\t\t\tif(top){\r\n\t\t\t\trow.data[this.field].unshift(data);\r\n\t\t\t}else{\r\n\t\t\t\trow.data[this.field].push(data);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.initializeRow(row);\r\n\t\tthis.layoutRow(row);\r\n\r\n\t\tthis.refreshData(true);\r\n\t}\r\n\r\n\tfindChildIndex(subject, parent){\r\n\t\tvar match = false;\r\n\r\n\t\tif(typeof subject == \"object\"){\r\n\r\n\t\t\tif(subject instanceof Row){\r\n\t\t\t\t//subject is row element\r\n\t\t\t\tmatch = subject.data;\r\n\t\t\t}else if(subject instanceof RowComponent){\r\n\t\t\t\t//subject is public row component\r\n\t\t\t\tmatch = subject._getSelf().data;\r\n\t\t\t}else if(typeof HTMLElement !== \"undefined\" && subject instanceof HTMLElement){\r\n\t\t\t\tif(parent.modules.dataTree){\r\n\t\t\t\t\tmatch = parent.modules.dataTree.children.find((childRow) => {\r\n\t\t\t\t\t\treturn childRow instanceof Row ? childRow.element === subject : false;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tif(match){\r\n\t\t\t\t\t\tmatch = match.data;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t}else if(typeof subject == \"undefined\" || subject === null){\r\n\t\t\tmatch = false\r\n\t\t}else{\r\n\t\t\t//subject should be treated as the index of the row\r\n\t\t\tmatch = parent.data[this.field].find((row) => {\r\n\t\t\t\treturn row.data[this.table.options.index] == subject;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(match){\r\n\r\n\t\t\tif(Array.isArray(parent.data[this.field])){\r\n\t\t\t\tmatch = parent.data[this.field].indexOf(match);\r\n\t\t\t}\r\n\r\n\t\t\tif(match == -1){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//catch all for any other type of input\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetTreeChildren(row, component, recurse){\r\n\t\tvar config = row.modules.dataTree,\r\n\t\toutput = [];\r\n\r\n\t\tif(config.children){\r\n\r\n\t\t\tif(!Array.isArray(config.children)){\r\n\t\t\t\tconfig.children = this.generateChildren(row);\r\n\t\t\t}\r\n\r\n\t\t\tconfig.children.forEach((childRow) => {\r\n\t\t\t\tif(childRow instanceof Row){\r\n\t\t\t\t\toutput.push(component ? childRow.getComponent() : childRow);\r\n\r\n\t\t\t\t\tif(recurse){\r\n\t\t\t\t\t\toutput = output.concat(this.getTreeChildren(childRow, component, recurse));\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetChildField(){\r\n\t\treturn this.field;\r\n\t}\r\n\r\n\tredrawNeeded(data){\r\n\t\tconsole.log(\"needed?\", data)\r\n\t\treturn (this.field ? typeof data[this.field] !== \"undefined\" : false) || (this.elementField ? typeof data[this.elementField] !== \"undefined\" : false);\r\n\t}\r\n}\r\n\r\nDataTree.moduleName = \"dataTree\";\r\n\r\nexport default DataTree;","import csv from './downloaders/csv.js';\r\nimport json from './downloaders/json.js';\r\nimport pdf from './downloaders/pdf.js';\r\nimport xlsx from './downloaders/xlsx.js';\r\nimport html from './downloaders/html.js';\r\nimport jsonLines from './downloaders/jsonLines.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n\tjsonLines:jsonLines,\r\n\tpdf:pdf,\r\n\txlsx:xlsx,\r\n\thtml:html,\r\n};","export default function(list, options, setFileContents){\r\n\tvar delimiter = options && options.delimiter ? options.delimiter : \",\",\r\n\tfileContents = [],\r\n\theaders = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = [];\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - CSV downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"header\":\r\n\t\t\trow.columns.forEach((col, i) => {\r\n\t\t\t\tif(col && col.depth === 1){\r\n\t\t\t\t\theaders[i] = typeof col.value == \"undefined\" || col.value === null ? \"\" : ('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\t\tif(col){\r\n\r\n\t\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.push('\"' + String(col.value).split('\"').join('\"\"') + '\"');\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item.join(delimiter));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(headers.length){\r\n\t\tfileContents.unshift(headers.join(delimiter));\r\n\t}\r\n\r\n\tfileContents = fileContents.join(\"\\n\");\r\n\r\n\tif(options.bom){\r\n\t\tfileContents = \"\\ufeff\" + fileContents;\r\n\t}\r\n\r\n\tsetFileContents(fileContents, \"text/csv\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tfileContents.push(item);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfileContents = JSON.stringify(fileContents, null, '\\t');\r\n\r\n\tsetFileContents(fileContents, \"application/json\");\r\n};","export default function (list, options, setFileContents) {\r\n\tconst fileContents = [];\r\n\r\n\tlist.forEach((row) => {\r\n\t\tconst item = {};\r\n\r\n\t\tswitch (row.type) {\r\n\t\t\tcase \"header\":\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process row groups\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\t\tconsole.warn(\"Download Warning - JSON downloader cannot process column calculations\");\r\n\t\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\t\trow.columns.forEach((col) => {\r\n\t\t\t\t\tif (col) {\r\n\t\t\t\t\t\titem[col.component.getTitleDownload() || col.component.getField()] = col.value;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tfileContents.push(JSON.stringify(item));\r\n\t\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tsetFileContents(fileContents.join(\"\\n\"), \"application/x-ndjson\");\r\n};","export default function(list, options, setFileContents){\r\n\tvar header = [],\r\n\tbody = [],\r\n\tautoTableParams = {},\r\n\trowGroupStyles = options.rowGroupStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 12,\r\n\t\tcellPadding: 6,\r\n\t\tfillColor: 220,\r\n\t},\r\n\trowCalcStyles = options.rowCalcStyles || {\r\n\t\tfontStyle: \"bold\",\r\n\t\tfontSize: 10,\r\n\t\tcellPadding: 4,\r\n\t\tfillColor: 232,\r\n\t},\r\n\tjsPDFParams = options.jsPDF || {},\r\n\ttitle = options && options.title ? options.title : \"\";\r\n\r\n\tif(!jsPDFParams.orientation){\r\n\t\tjsPDFParams.orientation = options.orientation || \"landscape\";\r\n\t}\r\n\r\n\tif(!jsPDFParams.unit){\r\n\t\tjsPDFParams.unit = \"pt\";\r\n\t}\r\n\r\n\t//parse row list\r\n\tlist.forEach((row) => {\r\n\t\tvar item = {};\r\n\r\n\t\tswitch(row.type){\r\n\t\t\tcase \"header\":\r\n\t\t\theader.push(parseRow(row));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tbody.push(parseRow(row, rowGroupStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"calc\":\r\n\t\t\tbody.push(parseRow(row, rowCalcStyles));\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"row\":\r\n\t\t\tbody.push(parseRow(row));\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tfunction parseRow(row, styles){\r\n\t\tvar rowData = [];\r\n\r\n\t\trow.columns.forEach((col) =>{\r\n\t\t\tvar cell;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tswitch(typeof col.value){\r\n\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\tcol.value = JSON.stringify(col.value);\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\tcol.value = \"\";\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell = {\r\n\t\t\t\t\tcontent:col.value,\r\n\t\t\t\t\tcolSpan:col.width,\r\n\t\t\t\t\trowSpan:col.height,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tif(styles){\r\n\t\t\t\t\tcell.styles = styles;\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowData.push(cell);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowData;\r\n\t}\r\n\r\n\r\n\t//configure PDF\r\n\tvar doc = new jspdf.jsPDF(jsPDFParams); //set document to landscape, better for most tables\r\n\r\n\tif(options && options.autoTable){\r\n\t\tif(typeof options.autoTable === \"function\"){\r\n\t\t\tautoTableParams = options.autoTable(doc) || {};\r\n\t\t}else{\r\n\t\t\tautoTableParams = options.autoTable;\r\n\t\t}\r\n\t}\r\n\r\n\tif(title){\r\n\t\tautoTableParams.didDrawPage = function(data) {\r\n\t\t\tdoc.text(title, 40, 30);\r\n\t\t};\r\n\t}\r\n\r\n\tautoTableParams.head = header;\r\n\tautoTableParams.body = body;\r\n\r\n\tdoc.autoTable(autoTableParams);\r\n\r\n\tif(options && options.documentProcessing){\r\n\t\toptions.documentProcessing(doc);\r\n\t}\r\n\r\n\tsetFileContents(doc.output(\"arraybuffer\"), \"application/pdf\");\r\n};","import CoreFeature from '../../../../core/CoreFeature.js';\r\n\r\nexport default function(list, options, setFileContents){\r\n\tvar self = this,\r\n\tsheetName = options.sheetName || \"Sheet1\",\r\n\tworkbook = XLSX.utils.book_new(),\r\n\ttableFeatures = new CoreFeature(this),\r\n\toutput;\r\n\r\n\tworkbook.SheetNames = [];\r\n\tworkbook.Sheets = {};\r\n\r\n\tfunction generateSheet(){\r\n\t\tvar rows = [],\r\n\t\tmerges = [],\r\n\t\tworksheet = {},\r\n\t\trange = {s: {c:0, r:0}, e: {c:(list[0] ? list[0].columns.reduce((a, b) => a + (b && b.width ? b.width : 1), 0) : 0), r:list.length }};\r\n\r\n\t\t//parse row list\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tvar rowData = [];\r\n\r\n\t\t\trow.columns.forEach(function(col, j){\r\n\r\n\t\t\t\tif(col){\r\n\t\t\t\t\trowData.push(!(col.value instanceof Date) && typeof col.value === \"object\" ? JSON.stringify(col.value) : col.value);\r\n\r\n\t\t\t\t\tif(col.width > 1 || col.height > -1){\r\n\t\t\t\t\t\tif(col.height > 1 || col.width > 1){\r\n\t\t\t\t\t\t\tmerges.push({s:{r:i,c:j},e:{r:i + col.height - 1,c:j + col.width - 1}});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\trowData.push(\"\");\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trows.push(rowData);\r\n\t\t});\r\n\r\n\t\t//convert rows to worksheet\r\n\t\tXLSX.utils.sheet_add_aoa(worksheet, rows);\r\n\r\n\t\tworksheet['!ref'] = XLSX.utils.encode_range(range);\r\n\r\n\t\tif(merges.length){\r\n\t\t\tworksheet[\"!merges\"] = merges;\r\n\t\t}\r\n\r\n\t\treturn worksheet;\r\n\t}\r\n\r\n\tif(options.sheetOnly){\r\n\t\tsetFileContents(generateSheet());\r\n\t\treturn;\r\n\t}\r\n\r\n\tif(options.sheets){\r\n\t\tfor(var sheet in options.sheets){\r\n\r\n\t\t\tif(options.sheets[sheet] === true){\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\t\t\t\tworkbook.Sheets[sheet] = generateSheet();\r\n\t\t\t}else{\r\n\r\n\t\t\t\tworkbook.SheetNames.push(sheet);\r\n\r\n\t\t\t\ttableFeatures.commsSend(options.sheets[sheet], \"download\", \"intercept\",{\r\n\t\t\t\t\ttype:\"xlsx\",\r\n\t\t\t\t\toptions:{sheetOnly:true},\r\n\t\t\t\t\tactive:self.active,\r\n\t\t\t\t\tintercept:function(data){\r\n\t\t\t\t\t\tworkbook.Sheets[sheet] = data;\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tworkbook.SheetNames.push(sheetName);\r\n\t\tworkbook.Sheets[sheetName] = generateSheet();\r\n\t}\r\n\r\n\tif(options.documentProcessing){\r\n\t\tworkbook = options.documentProcessing(workbook);\r\n\t}\r\n\r\n\t//convert workbook to binary array\r\n\tfunction s2ab(s) {\r\n\t\tvar buf = new ArrayBuffer(s.length);\r\n\t\tvar view = new Uint8Array(buf);\r\n\t\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\r\n\t\t\treturn buf;\r\n\t}\r\n\r\n\toutput = XLSX.write(workbook, {bookType:'xlsx', bookSST:true, type: 'binary'});\r\n\r\n\tsetFileContents(s2ab(output), \"application/octet-stream\");\r\n};","export default function(list, options, setFileContents){\r\n\tif(this.modExists(\"export\", true)){\r\n\t\tsetFileContents(this.modules.export.genereateHTMLTable(list), \"text/html\");\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultDownloaders from './defaults/downloaders.js';\r\n\r\nclass Download extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerTableOption(\"downloadReady\", function(data, blob){return blob;}); //function to manipulate download data\r\n\t\tthis.registerTableOption(\"downloadConfig\", {}); //download config\r\n\t\tthis.registerTableOption(\"downloadRowRange\", \"active\"); //restrict download to active rows only\r\n\r\n\t\tthis.registerColumnOption(\"download\");\r\n\t\tthis.registerColumnOption(\"titleDownload\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"download\", this.download.bind(this));\r\n\t\tthis.registerTableFunction(\"downloadToTab\", this.downloadToTab.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tdownloadToTab(type, filename, options, active){\r\n\t\tthis.download(type, filename, options, active, true);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//trigger file download\r\n\tdownload(type, filename, options, range, interceptCallback){\r\n\t\tvar downloadFunc = false;\r\n\r\n\t\tfunction buildLink(data, mime){\r\n\t\t\tif(interceptCallback){\r\n\t\t\t\tif(interceptCallback === true){\r\n\t\t\t\t\tthis.triggerDownload(data, mime, type, filename, true);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tinterceptCallback(data);\r\n\t\t\t\t}\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.triggerDownload(data, mime, type, filename);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(typeof type == \"function\"){\r\n\t\t\tdownloadFunc = type;\r\n\t\t}else{\r\n\t\t\tif(Download.downloaders[type]){\r\n\t\t\t\tdownloadFunc = Download.downloaders[type];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Download Error - No such download type found: \", type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(downloadFunc){\r\n\t\t\tvar list = this.generateExportList(range);\r\n\r\n\t\t\tdownloadFunc.call(this.table, list , options || {}, buildLink.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tgenerateExportList(range){\r\n\t\tvar list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, \"download\");\r\n\r\n\t\t//assign group header formatter\r\n\t\tvar groupHeader = this.table.options.groupHeaderDownload;\r\n\r\n\t\tif(groupHeader && !Array.isArray(groupHeader)){\r\n\t\t\tgroupHeader = [groupHeader];\r\n\t\t}\r\n\r\n\t\tlist.forEach((row) => {\r\n\t\t\tvar group;\r\n\r\n\t\t\tif(row.type === \"group\"){\r\n\t\t\t\tgroup = row.columns[0];\r\n\r\n\t\t\t\tif(groupHeader && groupHeader[row.indent]){\r\n\t\t\t\t\tgroup.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\ttriggerDownload(data, mime, type, filename, newTab){\r\n\t\tvar element = document.createElement('a'),\r\n\t\tblob = new Blob([data],{type:mime}),\r\n\t\tfilename = filename || \"Tabulator.\" + (typeof type === \"function\" ? \"txt\" : type);\r\n\r\n\t\tblob = this.table.options.downloadReady(data, blob);\r\n\r\n\t\tif(blob){\r\n\r\n\t\t\tif(newTab){\r\n\t\t\t\twindow.open(window.URL.createObjectURL(blob));\r\n\t\t\t}else{\r\n\t\t\t\tif(navigator.msSaveOrOpenBlob){\r\n\t\t\t\t\tnavigator.msSaveOrOpenBlob(blob, filename);\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.setAttribute('href', window.URL.createObjectURL(blob));\r\n\r\n\t\t\t\t\t//set file title\r\n\t\t\t\t\telement.setAttribute('download', filename);\r\n\r\n\t\t\t\t\t//trigger download\r\n\t\t\t\t\telement.style.display = 'none';\r\n\t\t\t\t\tdocument.body.appendChild(element);\r\n\t\t\t\t\telement.click();\r\n\r\n\t\t\t\t\t//remove temporary link element\r\n\t\t\t\t\tdocument.body.removeChild(element);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"downloadComplete\");\r\n\t\t}\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"intercept\":\r\n\t\t\tthis.download(data.type, \"\", data.options, data.active, data.intercept);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nDownload.moduleName = \"download\";\r\n\r\n//load defaults\r\nDownload.downloaders = defaultDownloaders;\r\n\r\nexport default Download;","export default function maskInput(el, options){\r\n\tvar mask = options.mask,\r\n\tmaskLetter = typeof options.maskLetterChar !== \"undefined\" ? options.maskLetterChar : \"A\",\r\n\tmaskNumber = typeof options.maskNumberChar !== \"undefined\" ? options.maskNumberChar : \"9\",\r\n\tmaskWildcard = typeof options.maskWildcardChar !== \"undefined\" ? options.maskWildcardChar : \"*\",\r\n\tsuccess = false;\r\n\r\n\tfunction fillSymbols(index){\r\n\t\tvar symbol = mask[index];\r\n\t\tif(typeof symbol !== \"undefined\" && symbol !== maskWildcard && symbol !== maskLetter && symbol !== maskNumber){\r\n\t\t\tel.value = el.value + \"\" + symbol;\r\n\t\t\tfillSymbols(index+1);\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"keydown\", (e) => {\r\n\t\tvar index = el.value.length,\r\n\t\tchar = e.key;\r\n\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(index >= mask.length){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\tsuccess = false;\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\tswitch(mask[index]){\r\n\t\t\t\t\tcase maskLetter:\r\n\t\t\t\t\tif(char.toUpperCase() == char.toLowerCase()){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskNumber:\r\n\t\t\t\t\tif(isNaN(char)){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase maskWildcard:\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(char !== mask[index]){\r\n\t\t\t\t\t\te.preventDefault();\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tsuccess = false;\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tsuccess = true;\r\n\t\t}\r\n\r\n\t\treturn;\r\n\t});\r\n\r\n\tel.addEventListener(\"keyup\", (e) => {\r\n\t\tif(e.keyCode > 46){\r\n\t\t\tif(options.maskAutoFill){\r\n\t\t\t\tfillSymbols(el.value.length);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\r\n\tif(!el.placeholder){\r\n\t\tel.placeholder = mask;\r\n\t}\r\n\r\n\tif(options.maskAutoFill){\r\n\t\tfillSymbols(el.value.length);\r\n\t}\r\n}","import input from './editors/input.js';\r\nimport textarea from './editors/textarea.js';\r\nimport number from './editors/number.js';\r\nimport range from './editors/range.js';\r\nimport select from './editors/select.js';\r\nimport autocomplete from './editors/autocomplete.js';\r\nimport star from './editors/star.js';\r\nimport progress from './editors/progress.js';\r\nimport tickCross from './editors/tickCross.js';\r\n\r\nexport default {\r\n\tinput:input,\r\n\ttextarea:textarea,\r\n number:number,\r\n range:range,\r\n\tselect:select,\r\n\tautocomplete:autocomplete,\r\n\tstar:star,\r\n\tprogress:progress,\r\n\ttickCross:tickCross,\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\t//create and style input\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", editorParams.search ? \"search\" : \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof cellValue !== \"undefined\" ? cellValue : \"\";\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(e){\r\n\t\tif(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\t\t\tif(success(input.value)){\r\n\t\t\t\tcellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur or change\r\n\tinput.addEventListener(\"change\", onChange);\r\n\tinput.addEventListener(\"blur\", onChange);\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\t// case 9:\r\n\t\t\tcase 13:\r\n\t\t\tonChange(e);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//resizable text area element\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n var self = this,\r\n cellValue = cell.getValue(),\r\n vertNav = editorParams.verticalNavigation || \"hybrid\",\r\n value = String(cellValue !== null && typeof cellValue !== \"undefined\" ? cellValue : \"\"),\r\n count = (value.match(/(?:\\r\\n|\\r|\\n)/g) || []).length + 1,\r\n input = document.createElement(\"textarea\"),\r\n scrollHeight = 0;\r\n\r\n //create and style input\r\n input.style.display = \"block\";\r\n input.style.padding = \"2px\";\r\n input.style.height = \"100%\";\r\n input.style.width = \"100%\";\r\n input.style.boxSizing = \"border-box\";\r\n input.style.whiteSpace = \"pre-wrap\";\r\n input.style.resize = \"none\";\r\n\r\n if(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n for (let key in editorParams.elementAttributes){\r\n if(key.charAt(0) == \"+\"){\r\n key = key.slice(1);\r\n input.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n }else{\r\n input.setAttribute(key, editorParams.elementAttributes[key]);\r\n }\r\n }\r\n }\r\n\r\n input.value = value;\r\n\r\n onRendered(function(){\r\n input.focus({preventScroll: true});\r\n input.style.height = \"100%\";\r\n\r\n input.scrollHeight;\r\n input.style.height = input.scrollHeight + \"px\";\r\n cell.getRow().normalizeHeight();\r\n });\r\n\r\n function onChange(e){\r\n\r\n if(((cellValue === null || typeof cellValue === \"undefined\") && input.value !== \"\") || input.value !== cellValue){\r\n\r\n if(success(input.value)){\r\n cellValue = input.value; //persist value if successfully validated incase editor is used as header filter\r\n }\r\n\r\n setTimeout(function(){\r\n cell.getRow().normalizeHeight();\r\n },300)\r\n }else{\r\n cancel();\r\n }\r\n }\r\n\r\n //submit new value on blur or change\r\n input.addEventListener(\"change\", onChange);\r\n input.addEventListener(\"blur\", onChange);\r\n\r\n input.addEventListener(\"keyup\", function(){\r\n\r\n input.style.height = \"\";\r\n\r\n var heightNow = input.scrollHeight;\r\n\r\n input.style.height = heightNow + \"px\";\r\n\r\n if(heightNow != scrollHeight){\r\n scrollHeight = heightNow;\r\n cell.getRow().normalizeHeight();\r\n }\r\n });\r\n\r\n input.addEventListener(\"keydown\", function(e){\r\n\r\n switch(e.keyCode){\r\n case 27:\r\n cancel();\r\n break;\r\n\r\n case 38: //up arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n\r\n break;\r\n\r\n case 40: //down arrow\r\n if(vertNav == \"editor\" || (vertNav == \"hybrid\" && input.selectionStart !== input.value.length)){\r\n e.stopImmediatePropagation();\r\n e.stopPropagation();\r\n }\r\n break;\r\n\r\n case 35:\r\n case 36:\r\n e.stopPropagation();\r\n break;\r\n }\r\n });\r\n\r\n if(editorParams.mask){\r\n maskInput(input, editorParams);\r\n }\r\n\r\n return input;\r\n};","import maskInput from '../../inputMask.js';\r\n\r\n//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"number\");\r\n\r\n\tif(typeof editorParams.max != \"undefined\"){\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif(typeof editorParams.min != \"undefined\"){\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif(typeof editorParams.step != \"undefined\"){\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tvar blurFunc = function(e){\r\n\t\tonChange();\r\n\t};\r\n\r\n\tonRendered(function () {\r\n\t\t//submit new value on blur\r\n\t\tinput.removeEventListener(\"blur\", blurFunc);\r\n\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\r\n\t\t//submit new value on blur\r\n\t\tinput.addEventListener(\"blur\", blurFunc);\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value !== cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tif(vertNav == \"editor\"){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 35:\r\n\t\t\tcase 36:\r\n\t\t\te.stopPropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\treturn input;\r\n};","//input element with type of number\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar cellValue = cell.getValue(),\r\n\tinput = document.createElement(\"input\");\r\n\r\n\tinput.setAttribute(\"type\", \"range\");\r\n\r\n\tif (typeof editorParams.max != \"undefined\") {\r\n\t\tinput.setAttribute(\"max\", editorParams.max);\r\n\t}\r\n\r\n\tif (typeof editorParams.min != \"undefined\") {\r\n\t\tinput.setAttribute(\"min\", editorParams.min);\r\n\t}\r\n\r\n\tif (typeof editorParams.step != \"undefined\") {\r\n\t\tinput.setAttribute(\"step\", editorParams.step);\r\n\t}\r\n\r\n\t//create and style input\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = cellValue;\r\n\r\n\tonRendered(function () {\r\n\t\tinput.focus({preventScroll: true});\r\n\t\tinput.style.height = \"100%\";\r\n\t});\r\n\r\n\tfunction onChange(){\r\n\t\tvar value = input.value;\r\n\r\n\t\tif(!isNaN(value) && value !==\"\"){\r\n\t\t\tvalue = Number(value);\r\n\t\t}\r\n\r\n\t\tif(value != cellValue){\r\n\t\t\tif(success(value)){\r\n\t\t\t\tcellValue = value; //persist value if successfully validated incase editor is used as header filter\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcancel();\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tonChange();\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 13:\r\n\t\t\t// case 9:\r\n\t\t\tonChange();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27:\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\n\r\n//dropdown select editor\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? (Array.isArray(initialValue) ? initialValue : [initialValue]) : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : []),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tmultiselect = editorParams.multiselect,\r\n\tdataItems = [],\r\n\tcurrentItem = {},\r\n\tdisplayItems = [],\r\n\tcurrentItems = [],\r\n\tblurable = true,\r\n\tblockListShow = false,\r\n\tsearchWord = \"\",\r\n\tsearchWordTimeout = null;\r\n\r\n\tif(Array.isArray(editorParams) || (!Array.isArray(editorParams) && typeof editorParams === \"object\" && !editorParams.values)){\r\n\t\tconsole.warn(\"DEPRECATION WARNING - values for the select editor must now be passed into the values property of the editorParams object, not as the editorParams object\");\r\n\t\teditorParams = {values:editorParams};\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create select lookup list:\", field);\r\n\t\t}\r\n\r\n\t\treturn Object.keys(output);\r\n\t}\r\n\r\n\tfunction parseItems(inputValues, curentValues){\r\n\t\tvar dataList = [];\r\n\t\tvar displayList = [];\r\n\r\n\t\tfunction processComplexListItem(item){\r\n\t\t\tvar item = {\r\n\t\t\t\tlabel:item.label,\r\n\t\t\t\tvalue:item.value,\r\n\t\t\t\titemParams:item.itemParams,\r\n\t\t\t\telementAttributes: item.elementAttributes,\r\n\t\t\t\telement:false,\r\n\t\t\t};\r\n\r\n\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t// }\r\n\r\n\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\tsetItem(item);\r\n\t\t\t}\r\n\r\n\t\t\tdataList.push(item);\r\n\t\t\tdisplayList.push(item);\r\n\r\n\t\t\treturn item;\r\n\t\t}\r\n\r\n\t\tif(typeof inputValues == \"function\"){\r\n\t\t\tinputValues = inputValues(cell);\r\n\t\t}\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\t\t\t\tvar item;\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\r\n\t\t\t\t\tif(value.options){\r\n\t\t\t\t\t\titem = {\r\n\t\t\t\t\t\t\tlabel:value.label,\r\n\t\t\t\t\t\t\tgroup:true,\r\n\t\t\t\t\t\t\titemParams:value.itemParams,\r\n\t\t\t\t\t\t\telementAttributes:value.elementAttributes,\r\n\t\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\tdisplayList.push(item);\r\n\r\n\t\t\t\t\t\tvalue.options.forEach(function(item){\r\n\t\t\t\t\t\t\tprocessComplexListItem(item);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tprocessComplexListItem(value);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\r\n\t\t\t\t\titem = {\r\n\t\t\t\t\t\tlabel:value,\r\n\t\t\t\t\t\tvalue:value,\r\n\t\t\t\t\t\telement:false,\r\n\t\t\t\t\t};\r\n\r\n\t\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\t\tsetItem(item);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdataList.push(item);\r\n\t\t\t\t\tdisplayList.push(item);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\tlabel:inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t\telement:false,\r\n\t\t\t\t};\r\n\r\n\t\t\t\t// if(item.value === curentValue || (!isNaN(parseFloat(item.value)) && !isNaN(parseFloat(item.value)) && parseFloat(item.value) === parseFloat(curentValue))){\r\n\t\t\t\t// \tsetCurrentItem(item);\r\n\t\t\t\t// }\r\n\r\n\t\t\t\tif(curentValues.indexOf(item.value) > -1){\r\n\t\t\t\t\tsetItem(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdataList.push(item);\r\n\t\t\t\tdisplayList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(editorParams.sortValuesList){\r\n\t\t\tdataList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tdisplayList.sort((a, b) => {\r\n\t\t\t\treturn a.label < b.label ? -1 : (a.label > b.label ? 1 : 0);\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList !== \"asc\"){\r\n\t\t\t\tdataList.reverse();\r\n\t\t\t\tdisplayList.reverse();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tdataItems = dataList;\r\n\t\tdisplayItems = displayList;\r\n\r\n\t\tfillList();\r\n\t}\r\n\r\n\tfunction fillList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\titem.label = editorParams.listItemFormatter ? editorParams.listItemFormatter(item.value, item.label, cell, el, item.itemParams) : item.label;\r\n\t\t\t\tif(item.group){\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-group\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\t\tel.innerHTML = item.label === \"\" ? \" \" : item.label;\r\n\r\n\t\t\t\t\tel.addEventListener(\"click\", function(){\r\n\t\t\t\t\t\tblockListShow = true;\r\n\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tblockListShow = false;\r\n\t\t\t\t\t\t}, 10);\r\n\r\n\t\t\t\t\t\t// setCurrentItem(item);\r\n\t\t\t\t\t\t// chooseItem();\r\n\t\t\t\t\t\tif(multiselect){\r\n\t\t\t\t\t\t\ttoggleItem(item);\r\n\t\t\t\t\t\t\tinput.focus();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tchooseItem(item);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\t// if(item === currentItem){\r\n\t\t\t\t\t// \tel.classList.add(\"active\");\r\n\t\t\t\t\t// }\r\n\r\n\t\t\t\t\tif(currentItems.indexOf(item) > -1){\r\n\t\t\t\t\t\tel.classList.add(\"active\");\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item.elementAttributes && typeof item.elementAttributes == \"object\"){\r\n\t\t\t\t\tfor (let key in item.elementAttributes){\r\n\t\t\t\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\t\t\t\tkey = key.slice(1);\r\n\t\t\t\t\t\t\tel.setAttribute(key, input.getAttribute(key) + item.elementAttributes[\"+\" + key]);\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tel.setAttribute(key, item.elementAttributes[key]);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\t}\r\n\r\n\r\n\tfunction setCurrentItem(item, active){\r\n\r\n\t\tif(!multiselect && currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"focused\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item.element){\r\n\t\t\titem.element.classList.add(\"focused\");\r\n\t\t\tif(active){\r\n\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// function chooseItem(){\r\n\t// \thideList();\r\n\r\n\t// \tif(initialValue !== currentItem.value){\r\n\t// \t\tinitialValue = currentItem.value;\r\n\t// \t\tsuccess(currentItem.value);\r\n\t// \t}else{\r\n\t// \t\tcancel();\r\n\t// \t}\r\n\t// }\r\n\r\n\tfunction setItem(item) {\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index == -1){\r\n\t\t\tcurrentItems.push(item);\r\n\t\t\tsetCurrentItem(item, true);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\t}\r\n\r\n\tfunction unsetItem(index) {\r\n\t\tvar item = currentItems[index];\r\n\r\n\t\tif(index > -1){\r\n\t\t\tcurrentItems.splice(index, 1);\r\n\t\t\tif(item.element){\r\n\t\t\t\titem.element.classList.remove(\"active\");\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction toggleItem(item) {\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tvar index = currentItems.indexOf(item);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tunsetItem(index);\r\n\t\t}else{\r\n\t\t\tif(multiselect !== true && currentItems.length >= multiselect){\r\n\t\t\t\tunsetItem(0);\r\n\t\t\t}\r\n\r\n\t\t\tsetItem(item);\r\n\t\t}\r\n\r\n\t\tfillInput();\r\n\r\n\t}\r\n\r\n\tfunction chooseItem(item){\r\n\t\thideList();\r\n\r\n\t\tif(!item){\r\n\t\t\titem = currentItem;\r\n\t\t}\r\n\r\n\t\tif(item){\r\n\t\t\tinput.value = item.label;\r\n\t\t\tsuccess(item.value);\r\n\t\t}\r\n\r\n\t\tinitialDisplayValue = [item.value];\r\n\t}\r\n\r\n\r\n\tfunction chooseItems(silent){\r\n\t\tif(!silent){\r\n\t\t\thideList();\r\n\t\t}\r\n\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.value);\r\n\t\t});\r\n\r\n\t\tinitialDisplayValue = output;\r\n\r\n\t\tsuccess(output);\r\n\t}\r\n\r\n\tfunction fillInput(){\r\n\t\tvar output = [];\r\n\r\n\t\tcurrentItems.forEach((item) => {\r\n\t\t\toutput.push(item.label);\r\n\t\t});\r\n\r\n\t\tinput.value = output.join(\", \");\r\n\r\n\t\tif(self.currentCell === false){\r\n\t\t\tchooseItems(true);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tfunction unsetItems() {\r\n\r\n\t\tvar len = currentItems.length;\r\n\r\n\t\tfor(let i = 0; i < len; i++){\r\n\t\t\tunsetItem(0);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tcurrentItems = [];\r\n\r\n\t\tif(!listEl.parentNode){\r\n\t\t\tif(editorParams.values === true){\r\n\t\t\t\tparseItems(getUniqueColumnValues(), initialDisplayValue);\r\n\t\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\t\tparseItems(getUniqueColumnValues(editorParams.values), initialDisplayValue);\r\n\t\t\t}else{\r\n\t\t\t\tparseItems(editorParams.values || [], initialDisplayValue);\r\n\t\t\t}\r\n\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\r\n\r\n\t\t\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tblurable = false;\r\n\r\n\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\tblurable = true;\r\n\t\t\t\t}, 10);\r\n\t\t\t});\r\n\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\tfunction scrollTovalue(char){\r\n\r\n\t\tclearTimeout(searchWordTimeout);\r\n\r\n\t\tvar character = String.fromCharCode(event.keyCode).toLowerCase();\r\n\t\tsearchWord += character.toLowerCase();\r\n\r\n\t\tvar match = dataItems.find((item) => {\r\n\t\t\treturn typeof item.label !== \"undefined\" && item.label.toLowerCase().startsWith(searchWord);\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tsetCurrentItem(match, !multiselect);\r\n\t\t}\r\n\r\n\t\tsearchWordTimeout = setTimeout(() => {\r\n\t\t\tsearchWord = \"\";\r\n\t\t}, 800)\r\n\t}\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"text\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\tinput.style.cursor = \"default\";\r\n\tinput.readOnly = (this.currentCell != false);\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : \"\";\r\n\r\n\t// if(editorParams.values === true){\r\n\t// \tparseItems(getUniqueColumnValues(), initialValue);\r\n\t// }else if(typeof editorParams.values === \"string\"){\r\n\t// \tparseItems(getUniqueColumnValues(editorParams.values), initialValue);\r\n\t// }else{\r\n\t// \tparseItems(editorParams.values || [], initialValue);\r\n\t// }\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tif(!input.value){\r\n\t\t\tunsetItems();\r\n\t\t\tchooseItems();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(dataItems[index - 1], !multiselect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\t\t\tindex = dataItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < dataItems.length - 1)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < dataItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[0], !multiselect);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(dataItems[index + 1], !multiselect);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\t// chooseItem();\r\n\r\n\t\t\tif(multiselect){\r\n\t\t\t\ttoggleItem();\r\n\t\t\t}else{\r\n\t\t\t\tchooseItem();\r\n\t\t\t}\r\n\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(self.currentCell === false){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tif(e.keyCode >= 38 && e.keyCode <= 90){\r\n\t\t\t\tscrollTovalue(e.keyCode);\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tif(multiselect){\r\n\t\t\t\tchooseItems();\r\n\t\t\t}else{\r\n\t\t\t\tcancelItem();\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tif(!blockListShow){\r\n\t\t\tshowList();\r\n\t\t}\r\n\t});\r\n\r\n\t//style list element\r\n\tlistEl = document.createElement(\"div\");\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\treturn input;\r\n};","import Helpers from '../../../../core/tools/Helpers.js';\r\nimport maskInput from '../../inputMask.js';\r\n\r\n//autocomplete\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\tcellEl = cell.getElement(),\r\n\tinitialValue = cell.getValue(),\r\n\tvertNav = editorParams.verticalNavigation || \"editor\",\r\n\tinitialDisplayValue = typeof initialValue !== \"undefined\" || initialValue === null ? initialValue : (typeof editorParams.defaultValue !== \"undefined\" ? editorParams.defaultValue : \"\"),\r\n\tinput = document.createElement(\"input\"),\r\n\tlistEl = document.createElement(\"div\"),\r\n\tallItems = [],\r\n\tdisplayItems = [],\r\n\tvalues = [],\r\n\tcurrentItem = false,\r\n\tblurable = true,\r\n\tuniqueColumnValues = false;\r\n\r\n\t//style input\r\n\tinput.setAttribute(\"type\", \"search\");\r\n\r\n\tinput.style.padding = \"4px\";\r\n\tinput.style.width = \"100%\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style list element\r\n\tlistEl.classList.add(\"tabulator-edit-select-list\");\r\n\r\n\tlistEl.addEventListener(\"mousedown\", function(e){\r\n\t\tblurable = false;\r\n\r\n\t\tsetTimeout(function(){\r\n\t\t\tblurable = true;\r\n\t\t}, 10);\r\n\t});\r\n\r\n\r\n\tfunction genUniqueColumnValues(){\r\n\t\tif(editorParams.values === true){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues();\r\n\t\t}else if(typeof editorParams.values === \"string\"){\r\n\t\t\tuniqueColumnValues = getUniqueColumnValues(editorParams.values);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction getUniqueColumnValues(field){\r\n\t\tvar output = {},\r\n\t\tdata = self.table.getData(),\r\n\t\tcolumn;\r\n\r\n\t\tif(field){\r\n\t\t\tcolumn = self.table.columnManager.getColumnByField(field);\r\n\t\t}else{\r\n\t\t\tcolumn = cell.getColumn()._getSelf();\r\n\t\t}\r\n\r\n\t\tif(column){\r\n\t\t\tdata.forEach(function(row){\r\n\t\t\t\tvar val = column.getFieldValue(row);\r\n\r\n\t\t\t\tif(val !== null && typeof val !== \"undefined\" && val !== \"\"){\r\n\t\t\t\t\toutput[val] = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(editorParams.sortValuesList){\r\n\t\t\t\tif(editorParams.sortValuesList == \"asc\"){\r\n\t\t\t\t\toutput = Object.keys(output).sort();\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput = Object.keys(output).sort().reverse();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\toutput = Object.keys(output);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"unable to find matching column to create autocomplete lookup list:\", field);\r\n\t\t}\r\n\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfunction filterList(term, intialLoad){\r\n\t\tvar matches = [],\r\n\t\tvalues, items, searchEl;\r\n\r\n\t\t//lookup base values list\r\n\t\tif(uniqueColumnValues){\r\n\t\t\tvalues = uniqueColumnValues;\r\n\t\t}else{\r\n\t\t\tvalues = editorParams.values || [];\r\n\t\t}\r\n\r\n\t\tif(editorParams.searchFunc){\r\n\t\t\tmatches = editorParams.searchFunc(term, values);\r\n\r\n\t\t\tif(matches instanceof Promise){\r\n\r\n\t\t\t\taddNotice(typeof editorParams.searchingPlaceholder !== \"undefined\" ? editorParams.searchingPlaceholder : \"Searching...\");\r\n\r\n\t\t\t\tmatches.then((result) => {\r\n\t\t\t\t\tfillListIfNotEmpty(parseItems(result), intialLoad);\r\n\t\t\t\t}).catch((err) => {\r\n\t\t\t\t\tconsole.err(\"error in autocomplete search promise:\", err);\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tfillListIfNotEmpty(parseItems(matches), intialLoad);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\titems = parseItems(values);\r\n\r\n\t\t\tif(term === \"\"){\r\n\t\t\t\tif(editorParams.showListOnEmpty){\r\n\t\t\t\t\tmatches = items;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\titems.forEach(function(item){\r\n\t\t\t\t\tif(item.value !== null || typeof item.value !== \"undefined\"){\r\n\t\t\t\t\t\tif(String(item.value).toLowerCase().indexOf(String(term).toLowerCase()) > -1 || String(item.title).toLowerCase().indexOf(String(term).toLowerCase()) > -1){\r\n\t\t\t\t\t\t\tmatches.push(item);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tfillListIfNotEmpty(matches, intialLoad);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction addNotice(notice){\r\n\t\tvar searchEl = document.createElement(\"div\");\r\n\r\n\t\tclearList();\r\n\r\n\t\tif(notice !== false){\r\n\t\t\tsearchEl.classList.add(\"tabulator-edit-select-list-notice\");\r\n\t\t\tsearchEl.tabIndex = 0;\r\n\r\n\t\t\tif(notice instanceof Node){\r\n\t\t\t\tsearchEl.appendChild(notice);\r\n\t\t\t}else{\r\n\t\t\t\tsearchEl.innerHTML = notice;\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(searchEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction parseItems(inputValues){\r\n\t\tvar itemList = [];\r\n\r\n\t\tif(Array.isArray(inputValues)){\r\n\t\t\tinputValues.forEach(function(value){\r\n\r\n\t\t\t\tvar item = {};\r\n\r\n\t\t\t\tif(typeof value === \"object\"){\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value.value, value.label) : value.label;\r\n\t\t\t\t\titem.value = value.value;\r\n\t\t\t\t}else{\r\n\t\t\t\t\titem.title = editorParams.listItemFormatter ? editorParams.listItemFormatter(value, value) : value;\r\n\t\t\t\t\titem.value = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tfor(var key in inputValues){\r\n\t\t\t\tvar item = {\r\n\t\t\t\t\ttitle:editorParams.listItemFormatter ? editorParams.listItemFormatter(key, inputValues[key]) : inputValues[key],\r\n\t\t\t\t\tvalue:key,\r\n\t\t\t\t};\r\n\r\n\t\t\t\titemList.push(item);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn itemList;\r\n\t}\r\n\r\n\tfunction clearList(){\r\n\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\t}\r\n\r\n\tfunction fillListIfNotEmpty(items, intialLoad){\r\n\t\tif(items.length){\r\n\t\t\tfillList(items, intialLoad);\r\n\t\t}else{\r\n\t\t\tif(editorParams.emptyPlaceholder){\r\n\t\t\t\taddNotice(editorParams.emptyPlaceholder);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fillList(items, intialLoad){\r\n\t\tvar current = false;\r\n\r\n\t\tclearList();\r\n\r\n\t\tdisplayItems = items;\r\n\r\n\t\tdisplayItems.forEach(function(item){\r\n\t\t\tvar el = item.element;\r\n\r\n\t\t\tif(!el){\r\n\t\t\t\tel = document.createElement(\"div\");\r\n\t\t\t\tel.classList.add(\"tabulator-edit-select-list-item\");\r\n\t\t\t\tel.tabIndex = 0;\r\n\t\t\t\tel.innerHTML = item.title;\r\n\r\n\t\t\t\tel.addEventListener(\"click\", function(e){\r\n\t\t\t\t\tsetCurrentItem(item);\r\n\t\t\t\t\tchooseItem();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tel.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\t\tblurable = false;\r\n\r\n\t\t\t\t\tsetTimeout(function(){\r\n\t\t\t\t\t\tblurable = true;\r\n\t\t\t\t\t}, 10);\r\n\t\t\t\t});\r\n\r\n\t\t\t\titem.element = el;\r\n\r\n\t\t\t\tif(intialLoad && item.value == initialValue){\r\n\t\t\t\t\tinput.value = item.title;\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(item === currentItem){\r\n\t\t\t\t\titem.element.classList.add(\"active\");\r\n\t\t\t\t\tcurrent = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tlistEl.appendChild(el);\r\n\t\t});\r\n\r\n\t\tif(!current){\r\n\t\t\tsetCurrentItem(false);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction chooseItem(){\r\n\t\thideList();\r\n\r\n\t\tif(currentItem){\r\n\t\t\tif(initialValue !== currentItem.value){\r\n\t\t\t\tinitialValue = currentItem.value;\r\n\t\t\t\tinput.value = currentItem.title;\r\n\t\t\t\tsuccess(currentItem.value);\r\n\t\t\t}else{\r\n\t\t\t\tcancel();\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(editorParams.freetext){\r\n\t\t\t\tinitialValue = input.value;\r\n\t\t\t\tsuccess(input.value);\r\n\t\t\t}else{\r\n\t\t\t\tif(editorParams.allowEmpty && input.value === \"\"){\r\n\t\t\t\t\tinitialValue = input.value;\r\n\t\t\t\t\tsuccess(input.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcancel();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfunction showList(){\r\n\t\tif(!listEl.parentNode){\r\n\t\t\twhile(listEl.firstChild) listEl.removeChild(listEl.firstChild);\r\n\r\n\t\t\tvar offset = Helpers.elOffset(cellEl);\r\n\r\n\t\t\tlistEl.style.minWidth = cellEl.offsetWidth + \"px\";\r\n\r\n\t\t\tlistEl.style.top = (offset.top + cellEl.offsetHeight) + \"px\";\r\n\t\t\tlistEl.style.left = offset.left + \"px\";\r\n\t\t\tdocument.body.appendChild(listEl);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction setCurrentItem(item, showInputValue){\r\n\t\tif(currentItem && currentItem.element){\r\n\t\t\tcurrentItem.element.classList.remove(\"active\");\r\n\t\t}\r\n\r\n\t\tcurrentItem = item;\r\n\r\n\t\tif(item && item.element){\r\n\t\t\titem.element.classList.add(\"active\");\r\n\t\t}\r\n\r\n\t\tif(item && item.element && item.element.scrollIntoView){\r\n\t\t\titem.element.scrollIntoView({behavior: 'smooth', block: 'nearest', inline: 'start'});\r\n\t\t}\r\n\t}\r\n\r\n\tfunction hideList(){\r\n\t\tif(listEl.parentNode){\r\n\t\t\tlistEl.parentNode.removeChild(listEl);\r\n\t\t}\r\n\r\n\t\tremoveScrollListener();\r\n\t}\r\n\r\n\r\n\tfunction cancelItem(){\r\n\t\thideList();\r\n\t\tcancel();\r\n\t}\r\n\r\n\tfunction removeScrollListener() {\r\n\t\tself.table.rowManager.element.removeEventListener(\"scroll\", cancelItem);\r\n\t}\r\n\r\n\t//allow key based navigation\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tvar index;\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index)){\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index > 0){\r\n\t\t\t\t\tsetCurrentItem(displayItems[index - 1]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tsetCurrentItem(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 40: //down arrow\r\n\r\n\t\t\tindex = displayItems.indexOf(currentItem);\r\n\r\n\t\t\tif(vertNav == \"editor\" || (vertNav == \"hybrid\" && index < displayItems.length - 1)){\r\n\r\n\t\t\t\te.stopImmediatePropagation();\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tif(index < displayItems.length - 1){\r\n\t\t\t\t\tif(index == -1){\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[0]);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tsetCurrentItem(displayItems[index + 1]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\te.stopPropagation();\r\n\t\t\t// e.preventDefault();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tchooseItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancelItem();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 36: //home\r\n\t\t\tcase 35: //end\r\n\t\t\t//prevent table navigation while using input element\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"keyup\", function(e){\r\n\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 38: //up arrow\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tcase 39: //up arrow\r\n\t\t\tcase 40: //right arrow\r\n\t\t\tcase 13: //enter\r\n\t\t\tcase 27: //escape\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tfilterList(input.value);\r\n\t\t}\r\n\r\n\t});\r\n\r\n\tinput.addEventListener(\"search\", function(e){\r\n\t\tfilterList(input.value);\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tif(blurable){\r\n\t\t\tchooseItem();\r\n\t\t}\r\n\t});\r\n\r\n\tinput.addEventListener(\"focus\", function(e){\r\n\t\tvar value = initialDisplayValue;\r\n\t\tgenUniqueColumnValues();\r\n\t\tshowList();\r\n\t\tinput.value = value;\r\n\t\tfilterList(value, true);\r\n\t});\r\n\r\n\r\n\tonRendered(function(){\r\n\t\tinput.style.height = \"100%\";\r\n\t\tinput.focus({preventScroll: true});\r\n\t});\r\n\r\n\tif(editorParams.mask){\r\n\t\tmaskInput(input, editorParams);\r\n\t}\r\n\r\n\tsetTimeout(() => {\r\n\t\tthis.table.rowManager.element.addEventListener(\"scroll\", cancelItem);\r\n\t}, 10);\r\n\r\n\tgenUniqueColumnValues();\r\n\tinput.value = initialDisplayValue;\r\n\tfilterList(initialDisplayValue, true);\r\n\r\n\treturn input;\r\n};","//star rating\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar self = this,\r\n\telement = cell.getElement(),\r\n\tvalue = cell.getValue(),\r\n\tmaxStars = element.getElementsByTagName(\"svg\").length || 5,\r\n\tsize = element.getElementsByTagName(\"svg\")[0] ? element.getElementsByTagName(\"svg\")[0].getAttribute(\"width\") : 14,\r\n\tstars = [],\r\n\tstarsHolder = document.createElement(\"div\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\");\r\n\r\n\r\n\t//change star type\r\n\tfunction starChange(val){\r\n\t\tstars.forEach(function(star, i){\r\n\t\t\tif(i < val){\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-active\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-inactive\", \"tabulator-star-active\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}else{\r\n\t\t\t\tif(self.table.browser == \"ie\"){\r\n\t\t\t\t\tstar.setAttribute(\"class\", \"tabulator-star-inactive\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tstar.classList.replace(\"tabulator-star-active\", \"tabulator-star-inactive\");\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstar.innerHTML = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//build stars\r\n\tfunction buildStar(i){\r\n\r\n\t\tvar starHolder = document.createElement(\"span\");\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\r\n\t\tstars.push(nextStar);\r\n\r\n\t\tstarHolder.addEventListener(\"mouseenter\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tstarChange(i);\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"mousemove\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t});\r\n\r\n\t\tstarHolder.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\t\t\tsuccess(i);\r\n\t\t\telement.blur();\r\n\t\t});\r\n\r\n\t\tstarHolder.appendChild(nextStar);\r\n\t\tstarsHolder.appendChild(starHolder);\r\n\r\n\t}\r\n\r\n\t//handle keyboard navigation value change\r\n\tfunction changeValue(val){\r\n\t\tvalue = val;\r\n\t\tstarChange(val);\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\t//style holding element\r\n\tstarsHolder.style.verticalAlign = \"middle\";\r\n\tstarsHolder.style.display = \"inline-block\";\r\n\tstarsHolder.style.padding = \"4px\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", size);\r\n\tstar.setAttribute(\"height\", size);\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tstarsHolder.setAttribute(key, starsHolder.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tstarsHolder.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create correct number of stars\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tbuildStar(i);\r\n\t}\r\n\r\n\t//ensure value does not exceed number of stars\r\n\tvalue = Math.min(parseInt(value), maxStars);\r\n\r\n\t// set initial styling of stars\r\n\tstarChange(value);\r\n\r\n\tstarsHolder.addEventListener(\"mousemove\", function(e){\r\n\t\tstarChange(0);\r\n\t});\r\n\r\n\tstarsHolder.addEventListener(\"click\", function(e){\r\n\t\tsuccess(0);\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(e){\r\n\t\tcancel();\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\tchangeValue(value + 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\tchangeValue(value - 1);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 13: //enter\r\n\t\t\tsuccess(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\t\t}\r\n\t});\r\n\r\n\treturn starsHolder;\r\n};","//draggable progress bar\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar element = cell.getElement(),\r\n\tmax = typeof editorParams.max === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"max\")) || 100) : editorParams.max,\r\n\tmin = typeof editorParams.min === \"undefined\" ? ((element.getElementsByTagName(\"div\")[0] && element.getElementsByTagName(\"div\")[0].getAttribute(\"min\")) || 0) : editorParams.min,\r\n\tpercent = (max - min) / 100,\r\n\tvalue = cell.getValue() || 0,\r\n\thandle = document.createElement(\"div\"),\r\n\tbar = document.createElement(\"div\"),\r\n\tmouseDrag, mouseDragWidth;\r\n\r\n\t//set new value\r\n\tfunction updateValue(){\r\n\t\tvar style = window.getComputedStyle(element, null);\r\n\r\n\t\tvar calcVal = (percent * Math.round(bar.offsetWidth / ((element.clientWidth - parseInt(style.getPropertyValue(\"padding-left\")) - parseInt(style.getPropertyValue(\"padding-right\")))/100))) + min;\r\n\t\tsuccess(calcVal);\r\n\t\telement.setAttribute(\"aria-valuenow\", calcVal);\r\n\t\telement.setAttribute(\"aria-label\", value);\r\n\t}\r\n\r\n\t//style handle\r\n\thandle.style.position = \"absolute\";\r\n\thandle.style.right = \"0\";\r\n\thandle.style.top = \"0\";\r\n\thandle.style.bottom = \"0\";\r\n\thandle.style.width = \"5px\";\r\n\thandle.classList.add(\"tabulator-progress-handle\");\r\n\r\n\t//style bar\r\n\tbar.style.display = \"inline-block\";\r\n\tbar.style.position = \"relative\";\r\n\t// bar.style.top = \"8px\";\r\n\t// bar.style.bottom = \"8px\";\r\n\t// bar.style.left = \"4px\";\r\n\t// bar.style.marginRight = \"4px\";\r\n\tbar.style.height = \"100%\";\r\n\tbar.style.backgroundColor = \"#488CE9\";\r\n\tbar.style.maxWidth = \"100%\";\r\n\tbar.style.minWidth = \"0%\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tbar.setAttribute(key, bar.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tbar.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//style cell\r\n\telement.style.padding = \"4px 4px\";\r\n\r\n\t//make sure value is in range\r\n\tvalue = Math.min(parseFloat(value), max);\r\n\tvalue = Math.max(parseFloat(value), min);\r\n\r\n\t//workout percentage\r\n\tvalue = Math.round((value - min) / percent);\r\n\t// bar.style.right = value + \"%\";\r\n\tbar.style.width = value + \"%\";\r\n\r\n\telement.setAttribute(\"aria-valuemin\", min);\r\n\telement.setAttribute(\"aria-valuemax\", max);\r\n\r\n\tbar.appendChild(handle);\r\n\r\n\thandle.addEventListener(\"mousedown\", function(e){\r\n\t\tmouseDrag = e.screenX;\r\n\t\tmouseDragWidth = bar.offsetWidth;\r\n\t});\r\n\r\n\thandle.addEventListener(\"mouseover\", function(){\r\n\t\thandle.style.cursor = \"ew-resize\";\r\n\t});\r\n\r\n\telement.addEventListener(\"mousemove\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\tbar.style.width = (mouseDragWidth + e.screenX - mouseDrag) + \"px\";\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"mouseup\", function(e){\r\n\t\tif(mouseDrag){\r\n\t\t\te.stopPropagation();\r\n\t\t\te.stopImmediatePropagation();\r\n\r\n\t\t\tmouseDrag = false;\r\n\t\t\tmouseDragWidth = false;\r\n\r\n\t\t\tupdateValue();\r\n\t\t}\r\n\t});\r\n\r\n\t//allow key based navigation\r\n\telement.addEventListener(\"keydown\", function(e){\r\n\t\tswitch(e.keyCode){\r\n\t\t\tcase 39: //right arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth + element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 37: //left arrow\r\n\t\t\te.preventDefault();\r\n\t\t\tbar.style.width = (bar.clientWidth - element.clientWidth/100) + \"px\";\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 9: //tab\r\n\t\t\tcase 13: //enter\r\n\t\t\tupdateValue();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase 27: //escape\r\n\t\t\tcancel();\r\n\t\t\tbreak;\r\n\r\n\t\t}\r\n\t});\r\n\r\n\telement.addEventListener(\"blur\", function(){\r\n\t\tcancel();\r\n\t});\r\n\r\n\treturn bar;\r\n};","//checkbox\r\nexport default function(cell, onRendered, success, cancel, editorParams){\r\n\tvar value = cell.getValue(),\r\n\tinput = document.createElement(\"input\"),\r\n\ttristate = editorParams.tristate,\r\n\tindetermValue = typeof editorParams.indeterminateValue === \"undefined\" ? null : editorParams.indeterminateValue,\r\n\tindetermState = false;\r\n\r\n\tinput.setAttribute(\"type\", \"checkbox\");\r\n\tinput.style.marginTop = \"5px\";\r\n\tinput.style.boxSizing = \"border-box\";\r\n\r\n\tif(editorParams.elementAttributes && typeof editorParams.elementAttributes == \"object\"){\r\n\t\tfor (let key in editorParams.elementAttributes){\r\n\t\t\tif(key.charAt(0) == \"+\"){\r\n\t\t\t\tkey = key.slice(1);\r\n\t\t\t\tinput.setAttribute(key, input.getAttribute(key) + editorParams.elementAttributes[\"+\" + key]);\r\n\t\t\t}else{\r\n\t\t\t\tinput.setAttribute(key, editorParams.elementAttributes[key]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinput.value = value;\r\n\r\n\tif(tristate && (typeof value === \"undefined\" || value === indetermValue || value === \"\")){\r\n\t\tindetermState = true;\r\n\t\tinput.indeterminate = true;\r\n\t}\r\n\r\n\tif(this.table.browser != \"firefox\"){ //prevent blur issue on mac firefox\r\n\t\tonRendered(function(){\r\n\t\t\tinput.focus({preventScroll: true});\r\n\t\t});\r\n\t}\r\n\r\n\tinput.checked = value === true || value === \"true\" || value === \"True\" || value === 1;\r\n\r\n\tonRendered(function(){\r\n\t\tinput.focus();\r\n\t});\r\n\r\n\tfunction setValue(blur){\r\n\t\tif(tristate){\r\n\t\t\tif(!blur){\r\n\t\t\t\tif(input.checked && !indetermState){\r\n\t\t\t\t\tinput.checked = false;\r\n\t\t\t\t\tinput.indeterminate = true;\r\n\t\t\t\t\tindetermState = true;\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tindetermState = false;\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(indetermState){\r\n\t\t\t\t\treturn indetermValue;\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn input.checked;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\treturn input.checked;\r\n\t\t}\r\n\t}\r\n\r\n\t//submit new value on blur\r\n\tinput.addEventListener(\"change\", function(e){\r\n\t\tsuccess(setValue());\r\n\t});\r\n\r\n\tinput.addEventListener(\"blur\", function(e){\r\n\t\tsuccess(setValue(true));\r\n\t});\r\n\r\n\t//submit new value on enter\r\n\tinput.addEventListener(\"keydown\", function(e){\r\n\t\tif(e.keyCode == 13){\r\n\t\t\tsuccess(setValue());\r\n\t\t}\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tcancel();\r\n\t\t}\r\n\t});\r\n\r\n\treturn input;\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport defaultEditors from './defaults/editors.js';\r\n\r\nclass Edit extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.currentCell = false; //hold currently editing cell\r\n\t\tthis.mouseClick = false; //hold mousedown state to prevent click binding being overriden by editor opening\r\n\t\tthis.recursionBlock = false; //prevent focus recursion\r\n\t\tthis.invalidEdit = false;\r\n\t\tthis.editedCells = [];\r\n\r\n\t\tthis.editors = Edit.editors;\r\n\r\n\t\tthis.registerColumnOption(\"editable\");\r\n\t\tthis.registerColumnOption(\"editor\");\r\n\t\tthis.registerColumnOption(\"editorParams\");\r\n\r\n\t\tthis.registerColumnOption(\"cellEditing\");\r\n\t\tthis.registerColumnOption(\"cellEdited\");\r\n\t\tthis.registerColumnOption(\"cellEditCancelled\");\r\n\r\n\t\tthis.registerTableFunction(\"getEditedCells\", this.getEditedCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellEdited\", this.clearCellEdited.bind(this));\r\n\t\tthis.registerTableFunction(\"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerTableFunction(\"navigateDown\", this.navigateDown.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isEdited\", this.cellisEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearEdited\", this.clearEdited.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"edit\", this.editCell.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"cancelEdit\", this.cellCancelEdit.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigatePrev\", this.navigatePrev.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateNext\", this.navigateNext.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateLeft\", this.navigateLeft.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateRight\", this.navigateRight.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateUp\", this.navigateUp.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"navigateDown\", this.navigateDown.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-init\", this.bindEditor.bind(this));\r\n\t\tthis.subscribe(\"cell-delete\", this.clearEdited.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t\tthis.subscribe(\"column-delete\", this.columnDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"row-deleting\", this.rowDeleteCheck.bind(this));\r\n\t\tthis.subscribe(\"data-refeshing\", this.cancelEdit.bind(this));\r\n\r\n\t\tthis.subscribe(\"keybinding-nav-prev\", this.navigatePrev.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this, undefined));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this, undefined));\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t////// Keybinding Functions ///////\r\n\t///////////////////////////////////\r\n\r\n\tkeybindingNavigateNext(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnewRow = this.options(\"tabEndNewRow\");\r\n\r\n\t\tif(cell){\r\n\t\t\tif(!this.navigateNext(cell, e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\t// cell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tcell.getComponent().navigateNext();\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Cell Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\tcellisEdited(cell){\r\n\t\treturn !! cell.modules.edit && cell.modules.edit.edited;\r\n\t}\r\n\r\n\tcellCancelEdit(cell){\r\n\t\tif(cell === this.currentCell){\r\n\t\t\tthis.table.modules.edit.cancelEdit();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Cancel Editor Error - This cell is not currently being edited \");\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\tclearCellEdited(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.table.modules.edit.getEditedCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.table.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(cell = this.currentCell, e){\r\n\t\tvar nextCell, prevRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateLeft();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tprevRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(prevRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(prevRow, prevRow.cells.length);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateNext(cell = this.currentCell, e){\r\n\t\tvar nextCell, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tnextCell = this.navigateRight();\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\t\tif(nextRow){\r\n\t\t\t\t\tnextCell = this.findNextEditableCell(nextRow, -1);\r\n\r\n\t\t\t\t\tif(nextCell){\r\n\t\t\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\t\t\treturn true;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateLeft(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findPrevEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateRight(cell = this.currentCell, e){\r\n\t\tvar index, nextCell;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextCell = this.findNextEditableCell(cell.row, index);\r\n\r\n\t\t\tif(nextCell){\r\n\t\t\t\tnextCell.getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateUp(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.prevDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tnavigateDown(cell = this.currentCell, e){\r\n\t\tvar index, nextRow;\r\n\r\n\t\tif(cell){\r\n\r\n\t\t\tif(e){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\r\n\t\t\tindex = cell.getIndex();\r\n\t\t\tnextRow = this.table.rowManager.nextDisplayRow(cell.row, true);\r\n\r\n\t\t\tif(nextRow){\r\n\t\t\t\tnextRow.cells[index].getComponent().edit();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n\r\n\tfindNextEditableCell(row, index){\r\n\t\tvar nextCell = false;\r\n\r\n\t\tif(index < row.cells.length-1){\r\n\t\t\tfor(var i = index+1; i < row.cells.length; i++){\r\n\t\t\t\tlet cell = row.cells[i];\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tlet allowEdit = true;\r\n\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tnextCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn nextCell;\r\n\t}\r\n\r\n\tfindPrevEditableCell(row, index){\r\n\t\tvar prevCell = false;\r\n\r\n\t\tif(index > 0){\r\n\t\t\tfor(var i = index-1; i >= 0; i--){\r\n\t\t\t\tlet cell = row.cells[i],\r\n\t\t\t\tallowEdit = true;\r\n\r\n\t\t\t\tif(cell.column.modules.edit && Helpers.elVisible(cell.getElement())){\r\n\t\t\t\t\tif(typeof cell.column.modules.edit.check == \"function\"){\r\n\t\t\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(allowEdit){\r\n\t\t\t\t\t\tprevCell = cell;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn prevCell;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.editor !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\tcolumnDeleteCheck(column){\r\n\t\tif(this.currentCell && this.currentCell.column === column){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\trowDeleteCheck(row){\r\n\t\tif(this.currentCell && this.currentCell.row === row){\r\n\t\t\tthis.cancelEdit();\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column editor\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {\r\n\t\t\teditor:false,\r\n\t\t\tblocked:false,\r\n\t\t\tcheck:column.definition.editable,\r\n\t\t\tparams:column.definition.editorParams || {}\r\n\t\t};\r\n\r\n\t\t//set column editor\r\n\t\tswitch(typeof column.definition.editor){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(this.editors[column.definition.editor]){\r\n\t\t\t\tconfig.editor = this.editors[column.definition.editor];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Editor Error - No such editor found: \", column.definition.editor);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.editor = column.definition.editor;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(column.definition.editor === true){\r\n\t\t\t\tif(typeof column.definition.formatter !== \"function\"){\r\n\t\t\t\t\tif(this.editors[column.definition.formatter]){\r\n\t\t\t\t\t\tconfig.editor = this.editors[column.definition.formatter];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconfig.editor = this.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Editor Error - Cannot auto lookup editor for a custom formatter: \", column.definition.formatter);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(config.editor){\r\n\t\t\tcolumn.modules.edit = config;\r\n\t\t}\r\n\t}\r\n\r\n\tgetCurrentCell(){\r\n\t\treturn this.currentCell ? this.currentCell.getComponent() : false;\r\n\t}\r\n\r\n\tclearEditor(cancel){\r\n\t\tvar cell = this.currentCell,\r\n\t\tcellEl;\r\n\r\n\t\tthis.invalidEdit = false;\r\n\r\n\t\tif(cell){\r\n\t\t\tthis.currentCell = false;\r\n\r\n\t\t\tcellEl = cell.getElement();\r\n\r\n\t\t\tif(cancel){\r\n\t\t\t\tif(cell.column.modules.validate && this.table.modExists(\"validate\")){\r\n\t\t\t\t\tthis.table.modules.validate.cellValidate(cell);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tcellEl.classList.remove(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tcellEl.classList.remove(\"tabulator-editing\");\r\n\r\n\t\t\twhile(cellEl.firstChild) cellEl.removeChild(cellEl.firstChild);\r\n\r\n\t\t\tcell.row.getElement().classList.remove(\"tabulator-row-editing\");\r\n\t\t}\r\n\t}\r\n\r\n\tcancelEdit(){\r\n\t\tif(this.currentCell){\r\n\t\t\tvar cell = this.currentCell;\r\n\t\t\tvar component = this.currentCell.getComponent();\r\n\r\n\t\t\tthis.clearEditor(true);\r\n\t\t\tcell.setValueActual(cell.getValue());\r\n\t\t\tcell.cellRendered();\r\n\r\n\t\t\tif(cell.column.definition.editor == \"textarea\" || cell.column.definition.variableHeight){\r\n\t\t\t\tcell.row.normalizeHeight(true);\r\n\t\t\t}\r\n\r\n\t\t\tif(cell.column.definition.cellEditCancelled){\r\n\t\t\t\tcell.column.definition.cellEditCancelled.call(this.table, component);\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatch(\"edit-cancelled\", cell);\r\n\t\t\tthis.dispatchExternal(\"cellEditCancelled\", component);\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a cell\r\n\tbindEditor(cell){\r\n\t\tif(cell.column.modules.edit){\r\n\t\t\tvar self = this,\r\n\t\t\telement = cell.getElement(true);\r\n\r\n\t\t\telement.setAttribute(\"tabindex\", 0);\r\n\r\n\t\t\telement.addEventListener(\"click\", function(e){\r\n\t\t\t\tif(!element.classList.contains(\"tabulator-editing\")){\r\n\t\t\t\t\telement.focus({preventScroll: true});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif (e.button === 2) {\r\n\t\t\t\t\te.preventDefault();\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.mouseClick = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.addEventListener(\"focus\", function(e){\r\n\t\t\t\tif(!self.recursionBlock){\r\n\t\t\t\t\tself.edit(cell, e, false);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tfocusCellNoEvent(cell, block){\r\n\t\tthis.recursionBlock = true;\r\n\r\n\t\tif(!(block && this.table.browser === \"ie\")){\r\n\t\t\tcell.getElement().focus({preventScroll: true});\r\n\t\t}\r\n\r\n\t\tthis.recursionBlock = false;\r\n\t}\r\n\r\n\teditCell(cell, forceEdit){\r\n\t\tthis.focusCellNoEvent(cell);\r\n\t\tthis.edit(cell, false, forceEdit);\r\n\t}\r\n\r\n\tfocusScrollAdjust(cell){\r\n\t\tif(this.table.rowManager.getRenderMode() == \"virtual\"){\r\n\t\t\tvar topEdge = this.table.rowManager.element.scrollTop,\r\n\t\t\tbottomEdge = this.table.rowManager.element.clientHeight + this.table.rowManager.element.scrollTop,\r\n\t\t\trowEl = cell.row.getElement(),\r\n\t\t\toffset = rowEl.offsetTop;\r\n\r\n\t\t\tif(rowEl.offsetTop < topEdge){\r\n\t\t\t\tthis.table.rowManager.element.scrollTop -= (topEdge - rowEl.offsetTop);\r\n\t\t\t}else{\r\n\t\t\t\tif(rowEl.offsetTop + rowEl.offsetHeight > bottomEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollTop += (rowEl.offsetTop + rowEl.offsetHeight - bottomEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tvar leftEdge = this.table.rowManager.element.scrollLeft,\r\n\t\t\trightEdge = this.table.rowManager.element.clientWidth + this.table.rowManager.element.scrollLeft,\r\n\t\t\tcellEl = cell.getElement(),\r\n\t\t\toffset = cellEl.offsetLeft;\r\n\r\n\t\t\tif(this.table.modExists(\"frozenColumns\")){\r\n\t\t\t\tleftEdge += parseInt(this.table.modules.frozenColumns.leftMargin);\r\n\t\t\t\trightEdge -= parseInt(this.table.modules.frozenColumns.rightMargin);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\t\tleftEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t\trightEdge -= parseInt(this.table.columnManager.renderer.vDomPadLeft);\r\n\t\t\t}\r\n\r\n\t\t\tif(cellEl.offsetLeft < leftEdge){\r\n\r\n\t\t\t\tthis.table.rowManager.element.scrollLeft -= (leftEdge - cellEl.offsetLeft);\r\n\t\t\t}else{\r\n\t\t\t\tif(cellEl.offsetLeft + cellEl.offsetWidth > rightEdge){\r\n\t\t\t\t\tthis.table.rowManager.element.scrollLeft += (cellEl.offsetLeft + cellEl.offsetWidth - rightEdge);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tedit(cell, e, forceEdit){\r\n\t\tvar self = this,\r\n\t\tallowEdit = true,\r\n\t\trendered = function(){},\r\n\t\telement = cell.getElement(),\r\n\t\tcellEditor, component, params;\r\n\r\n\t\t//prevent editing if another cell is refusing to leave focus (eg. validation fail)\r\n\t\tif(this.currentCell){\r\n\t\t\tif(!this.invalidEdit){\r\n\t\t\t\tthis.cancelEdit();\r\n\t\t\t}\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tvar valid = true;\r\n\r\n\t\t\t\tif(cell.column.modules.validate && self.table.modExists(\"validate\") && self.table.options.validationMode != \"manual\"){\r\n\t\t\t\t\tvalid = self.table.modules.validate.validate(cell.column.modules.validate, cell, value);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(valid === true || self.table.options.validationMode === \"highlight\"){\r\n\t\t\t\t\tself.clearEditor();\r\n\r\n\r\n\t\t\t\t\tif(!cell.modules.edit){\r\n\t\t\t\t\t\tcell.modules.edit = {};\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.modules.edit.edited = true;\r\n\r\n\t\t\t\t\tif(self.editedCells.indexOf(cell) == -1){\r\n\t\t\t\t\t\tself.editedCells.push(cell);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tcell.setValue(value, true);\r\n\r\n\t\t\t\t\tif(valid !== true){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.invalidEdit = true;\r\n\t\t\t\t\telement.classList.add(\"tabulator-validation-fail\");\r\n\t\t\t\t\tself.focusCellNoEvent(cell, true);\r\n\t\t\t\t\trendered();\r\n\t\t\t\t\tself.table.externalEvents.dispatch(\"validationFailed\", cell.getComponent(), value, valid);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call success on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){\r\n\t\t\tif(self.currentCell === cell){\r\n\t\t\t\tself.cancelEdit();\r\n\t\t\t}else{\r\n\t\t\t\t// console.warn(\"Edit Success Error - cannot call cancel on a cell that is no longer being edited\");\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\trendered = callback;\r\n\t\t}\r\n\r\n\t\tif(!cell.column.modules.edit.blocked){\r\n\t\t\tif(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t}\r\n\r\n\t\t\tswitch(typeof cell.column.modules.edit.check){\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check(cell.getComponent());\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tallowEdit = cell.column.modules.edit.check;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(allowEdit || forceEdit){\r\n\r\n\t\t\t\tself.cancelEdit();\r\n\r\n\t\t\t\tself.currentCell = cell;\r\n\r\n\t\t\t\tthis.focusScrollAdjust(cell);\r\n\r\n\t\t\t\tcomponent = cell.getComponent();\r\n\r\n\t\t\t\tif(this.mouseClick){\r\n\t\t\t\t\tthis.mouseClick = false;\r\n\r\n\t\t\t\t\tif(cell.column.definition.cellClick){\r\n\t\t\t\t\t\tcell.column.definition.cellClick.call(this.table, e, component);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(cell.column.definition.cellEditing){\r\n\t\t\t\t\tcell.column.definition.cellEditing.call(this.table, component);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.dispatchExternal(\"cellEditing\", component);\r\n\r\n\t\t\t\tparams = typeof cell.column.modules.edit.params === \"function\" ? cell.column.modules.edit.params(component) : cell.column.modules.edit.params;\r\n\r\n\t\t\t\tcellEditor = cell.column.modules.edit.editor.call(self, component, onRendered, success, cancel, params);\r\n\r\n\t\t\t\t//if editor returned, add to DOM, if false, abort edit\r\n\t\t\t\tif(cellEditor !== false){\r\n\r\n\t\t\t\t\tif(cellEditor instanceof Node){\r\n\t\t\t\t\t\telement.classList.add(\"tabulator-editing\");\r\n\t\t\t\t\t\tcell.row.getElement().classList.add(\"tabulator-row-editing\");\r\n\t\t\t\t\t\twhile(element.firstChild) element.removeChild(element.firstChild);\r\n\t\t\t\t\t\telement.appendChild(cellEditor);\r\n\r\n\t\t\t\t\t\t//trigger onRendered Callback\r\n\t\t\t\t\t\trendered();\r\n\r\n\t\t\t\t\t\t//prevent editing from triggering rowClick event\r\n\t\t\t\t\t\tvar children = element.children;\r\n\r\n\t\t\t\t\t\tfor (var i = 0; i < children.length; i++) {\r\n\t\t\t\t\t\t\tchildren[i].addEventListener(\"click\", function(e){\r\n\t\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Edit Error - Editor should return an instance of Node, the editor returned:\", cellEditor);\r\n\t\t\t\t\t\telement.blur();\r\n\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\telement.blur();\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn true;\r\n\t\t\t}else{\r\n\t\t\t\tthis.mouseClick = false;\r\n\t\t\t\telement.blur();\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.mouseClick = false;\r\n\t\t\telement.blur();\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tgetEditedCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.editedCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearEdited(cell){\r\n\t\tvar editIndex;\r\n\r\n\t\tif(cell.modules.edit && cell.modules.edit.edited){\r\n\t\t\tcell.modules.edit.edited = false;\r\n\r\n\t\t\tif(cell.modules.validate){\r\n\t\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\teditIndex = this.editedCells.indexOf(cell);\r\n\r\n\t\tif(editIndex > -1){\r\n\t\t\tthis.editedCells.splice(editIndex, 1);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nEdit.moduleName = \"edit\";\r\n\r\n//load defaults\r\nEdit.editors = defaultEditors;\r\n\r\n\r\nexport default Edit;\r\n","class ExportRow{\r\n\tconstructor(type, columns, component, indent){\r\n\t\tthis.type = type;\r\n\t\tthis.columns = columns;\r\n\t\tthis.component = component || false;\r\n\t\tthis.indent = indent || 0;\r\n\t}\r\n}\r\n\r\nexport default ExportRow;","class ExportColumn{\r\n\tconstructor(value, component, width, height, depth){\r\n\t\tthis.value = value;\r\n\t\tthis.component = component || false;\r\n\t\tthis.width = width;\r\n\t\tthis.height = height;\r\n\t\tthis.depth = depth;\r\n\t}\r\n}\r\n\r\nexport default ExportColumn;","import Module from '../../core/Module.js';\r\n\r\nimport ExportRow from './ExportRow.js';\r\nimport ExportColumn from './ExportColumn.js';\r\n\r\nclass Export extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = {};\r\n\t\tthis.cloneTableStyle = true;\r\n\t\tthis.colVisProp = \"\";\r\n\r\n\t\tthis.registerTableOption(\"htmlOutputConfig\", false); //html outypu config\r\n\r\n\t\tthis.registerColumnOption(\"htmlOutput\");\r\n\t\tthis.registerColumnOption(\"titleHtmlOutput\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.registerTableFunction(\"getHtml\", this.getHtml.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tgenerateExportList(config, style, range, colVisProp){\r\n\t\tthis.cloneTableStyle = style;\r\n\t\tthis.config = config || {};\r\n\t\tthis.colVisProp = colVisProp;\r\n\r\n\t\tvar headers = this.config.columnHeaders !== false ? this.headersToExportRows(this.generateColumnGroupHeaders()) : [];\r\n\t\tvar body = this.bodyToExportRows(this.rowLookup(range));\r\n\r\n\t\treturn headers.concat(body);\r\n\t}\r\n\r\n\tgenereateTable(config, style, range, colVisProp){\r\n\t\tvar list = this.generateExportList(config, style, range, colVisProp);\r\n\r\n\t\treturn this.genereateTableElement(list);\r\n\t}\r\n\r\n\trowLookup(range){\r\n\t\tvar rows = [];\r\n\r\n\t\tif(typeof range == \"function\"){\r\n\t\t\trange.call(this.table).forEach((row) =>{\r\n\t\t\t\trow = this.table.rowManager.findRow(row);\r\n\r\n\t\t\t\tif(row){\r\n\t\t\t\t\trows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tswitch(range){\r\n\t\t\t\tcase true:\r\n\t\t\t\tcase \"visible\":\r\n\t\t\t\trows = this.table.rowManager.getVisibleRows(false, true);\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"all\":\r\n\t\t\t\trows = this.table.rowManager.rows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"selected\":\r\n\t\t\t\trows = this.table.modules.selectRow.selectedRows;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"active\":\r\n\t\t\t\tdefault:\r\n\t\t\t\tif(this.table.options.pagination){\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows(this.table.rowManager.displayRows.length - 2);\r\n\t\t\t\t}else{\r\n\t\t\t\t\trows = this.table.rowManager.getDisplayRows();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Object.assign([], rows);\r\n\t}\r\n\r\n\tgenerateColumnGroupHeaders(){\r\n\t\tvar output = [];\r\n\r\n\t\tvar columns = this.config.columnGroups !== false ? this.table.columnManager.columns : this.table.columnManager.columnsByIndex;\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar colData = this.processColumnGroup(column);\r\n\r\n\t\t\tif(colData){\r\n\t\t\t\toutput.push(colData);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tprocessColumnGroup(column){\r\n\t\tvar subGroups = column.columns,\r\n\t\tmaxDepth = 0,\r\n\t\ttitle = column.definition[\"title\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))] || column.definition.title;\r\n\r\n\t\tvar groupData = {\r\n\t\t\ttitle:title,\r\n\t\t\tcolumn:column,\r\n\t\t\tdepth:1,\r\n\t\t};\r\n\r\n\t\tif(subGroups.length){\r\n\t\t\tgroupData.subGroups = [];\r\n\t\t\tgroupData.width = 0;\r\n\r\n\t\t\tsubGroups.forEach((subGroup) => {\r\n\t\t\t\tvar subGroupData = this.processColumnGroup(subGroup);\r\n\r\n\t\t\t\tif(subGroupData){\r\n\t\t\t\t\tgroupData.width += subGroupData.width;\r\n\t\t\t\t\tgroupData.subGroups.push(subGroupData);\r\n\r\n\t\t\t\t\tif(subGroupData.depth > maxDepth){\r\n\t\t\t\t\t\tmaxDepth = subGroupData.depth;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tgroupData.depth += maxDepth;\r\n\r\n\t\t\tif(!groupData.width){\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.columnVisCheck(column)){\r\n\t\t\t\tgroupData.width = 1;\r\n\t\t\t}else{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn groupData;\r\n\t}\r\n\r\n\tcolumnVisCheck(column){\r\n\t\treturn column.definition[this.colVisProp] !== false && (column.visible || (!column.visible && column.definition[this.colVisProp]));\r\n\t}\r\n\r\n\theadersToExportRows(columns){\r\n\t\tvar headers = [],\r\n\t\theaderDepth = 0,\r\n\t\texportRows = [];\r\n\r\n\t\tfunction parseColumnGroup(column, level){\r\n\r\n\t\t\tvar depth = headerDepth - level;\r\n\r\n\t\t\tif(typeof headers[level] === \"undefined\"){\r\n\t\t\t\theaders[level] = [];\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.height = column.subGroups ? 1 : (depth - column.depth) + 1;\r\n\r\n\t\t\theaders[level].push(column);\r\n\r\n\t\t\tif(column.height > 1){\r\n\t\t\t\tfor(let i = 1; i < column.height; i ++){\r\n\r\n\t\t\t\t\tif(typeof headers[level + i] === \"undefined\"){\r\n\t\t\t\t\t\theaders[level + i] = [];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\theaders[level + i].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.width > 1){\r\n\t\t\t\tfor(let i = 1; i < column.width; i ++){\r\n\t\t\t\t\theaders[level].push(false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(column.subGroups){\r\n\t\t\t\tcolumn.subGroups.forEach(function(subGroup){\r\n\t\t\t\t\tparseColumnGroup(subGroup, level+1);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//calculate maximum header debth\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tif(column.depth > headerDepth){\r\n\t\t\t\theaderDepth = column.depth;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tcolumns.forEach(function(column){\r\n\t\t\tparseColumnGroup(column,0);\r\n\t\t});\r\n\r\n\t\theaders.forEach((header) => {\r\n\t\t\tvar columns = [];\r\n\r\n\t\t\theader.forEach((col) => {\r\n\t\t\t\tif(col){\r\n\t\t\t\t\tcolumns.push(new ExportColumn(col.title, col.column.getComponent(), col.width, col.height, col.depth));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumns.push(null);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\texportRows.push(new ExportRow(\"header\", columns));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tbodyToExportRows(rows){\r\n\r\n\t\tvar columns = [];\r\n\t\tvar exportRows = [];\r\n\r\n\t\tthis.table.columnManager.columnsByIndex.forEach((column) => {\r\n\t\t\tif (this.columnVisCheck(column)) {\r\n\t\t\t\tcolumns.push(column.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(this.config.columnCalcs !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized){\r\n\t\t\t\trows.unshift(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized){\r\n\t\t\t\trows.push(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn this.config.rowGroups !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\treturn this.config.columnCalcs !== false;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\treturn !(this.table.options.dataTree && this.config.dataTree === false && row.modules.dataTree.parent);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t});\r\n\r\n\t\trows.forEach((row, i) => {\r\n\t\t\tvar rowData = row.getData(this.colVisProp);\r\n\t\t\tvar exportCols = [];\r\n\t\t\tvar indent = 0;\r\n\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tindent = row.level;\r\n\t\t\t\texportCols.push(new ExportColumn(row.key, row.getComponent(), columns.length, 1));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\" :\r\n\t\t\t\tcase \"row\" :\r\n\t\t\t\tcolumns.forEach((col) => {\r\n\t\t\t\t\texportCols.push(new ExportColumn(col._column.getFieldValue(rowData), col, 1, 1));\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tindent = row.modules.dataTree.index;\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\texportRows.push(new ExportRow(row.type, exportCols, row.getComponent(), indent));\r\n\t\t});\r\n\r\n\t\treturn exportRows;\r\n\t}\r\n\r\n\tgenereateTableElement(list){\r\n\t\tvar table = document.createElement(\"table\"),\r\n\t\theaderEl = document.createElement(\"thead\"),\r\n\t\tbodyEl = document.createElement(\"tbody\"),\r\n\t\tstyles = this.lookupTableStyles(),\r\n\t\trowFormatter = this.table.options[\"rowFormatter\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))],\r\n\t\tsetup = {};\r\n\r\n\t\tsetup.rowFormatter = rowFormatter !== null ? rowFormatter : this.table.options.rowFormatter;\r\n\r\n\t\tif(this.table.options.dataTree &&this.config.dataTree !== false && this.table.modExists(\"columnCalcs\")){\r\n\t\t\tsetup.treeElementField = this.table.modules.dataTree.elementField;\r\n\t\t}\r\n\r\n\t\t//assign group header formatter\r\n\t\tsetup.groupHeader = this.table.options[\"groupHeader\" + (this.colVisProp.charAt(0).toUpperCase() + this.colVisProp.slice(1))];\r\n\r\n\t\tif(setup.groupHeader && !Array.isArray(setup.groupHeader)){\r\n\t\t\tsetup.groupHeader = [setup.groupHeader];\r\n\t\t}\r\n\r\n\t\ttable.classList.add(\"tabulator-print-table\");\r\n\r\n\t\tthis.mapElementStyles(this.table.columnManager.getHeadersElement(), headerEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\r\n\t\tif(list.length > 1000){\r\n\t\t\tconsole.warn(\"It may take a long time to render an HTML table with more than 1000 rows\");\r\n\t\t}\r\n\r\n\t\tlist.forEach((row, i) => {\r\n\t\t\tswitch(row.type){\r\n\t\t\t\tcase \"header\":\r\n\t\t\t\theaderEl.appendChild(this.genereateHeaderElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateGroupElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"calc\":\r\n\t\t\t\tbodyEl.appendChild(this.genereateCalcElement(row, setup, styles));\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"row\":\r\n\t\t\t\tlet rowEl = this.genereateRowElement(row, setup, styles);\r\n\t\t\t\tthis.mapElementStyles(((i % 2) && styles.evenRow) ? styles.evenRow : styles.oddRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\t\t\tbodyEl.appendChild(rowEl);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(headerEl.innerHTML){\r\n\t\t\ttable.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\ttable.appendChild(bodyEl);\r\n\r\n\r\n\t\tthis.mapElementStyles(this.table.element, table, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\"]);\r\n\t\treturn table;\r\n\t}\r\n\r\n\tlookupTableStyles(){\r\n\t\tvar styles = {};\r\n\r\n\t\t//lookup row styles\r\n\t\tif(this.cloneTableStyle && window.getComputedStyle){\r\n\t\t\tstyles.oddRow = this.table.element.querySelector(\".tabulator-row-odd:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.evenRow = this.table.element.querySelector(\".tabulator-row-even:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.calcRow = this.table.element.querySelector(\".tabulator-row.tabulator-calcs\");\r\n\t\t\tstyles.firstRow = this.table.element.querySelector(\".tabulator-row:not(.tabulator-group):not(.tabulator-calcs)\");\r\n\t\t\tstyles.firstGroup = this.table.element.getElementsByClassName(\"tabulator-group\")[0];\r\n\r\n\t\t\tif(styles.firstRow){\r\n\t\t\t\tstyles.styleCells = styles.firstRow.getElementsByClassName(\"tabulator-cell\");\r\n\t\t\t\tstyles.firstCell = styles.styleCells[0];\r\n\t\t\t\tstyles.lastCell = styles.styleCells[styles.styleCells.length - 1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn styles;\r\n\t}\r\n\r\n\tgenereateHeaderElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trow.columns.forEach((column) => {\r\n\t\t\tif(column){\r\n\t\t\t\tvar cellEl = document.createElement(\"th\");\r\n\t\t\t\tvar classNames = column.component._column.definition.cssClass ? column.component._column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tcellEl.colSpan = column.width;\r\n\t\t\t\tcellEl.rowSpan = column.height;\r\n\r\n\t\t\t\tcellEl.innerHTML = column.value;\r\n\r\n\t\t\t\tif(this.cloneTableStyle){\r\n\t\t\t\t\tcellEl.style.boxSizing = \"border-box\";\r\n\t\t\t\t}\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"text-align\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"background-color\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\t\t\t\tthis.mapElementStyles(column.component._column.contentElement, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\t\t\tif(column.component._column.visible){\r\n\t\t\t\t\tthis.mapElementStyles(column.component.getElement(), cellEl, [\"width\"]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.component._column.definition.width){\r\n\t\t\t\t\t\tcellEl.style.width = column.component._column.definition.width + \"px\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.component._column.parent){\r\n\t\t\t\t\tthis.mapElementStyles(column.component._column.parent.groupElement, cellEl, [\"border-top\"]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateGroupElement(row, setup, styles){\r\n\r\n\t\tvar rowEl = document.createElement(\"tr\"),\r\n\t\tcellEl = document.createElement(\"td\"),\r\n\t\tgroup = row.columns[0];\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\tif(setup.groupHeader && setup.groupHeader[row.indent]){\r\n\t\t\tgroup.value = setup.groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t}else{\r\n\t\t\tif(setup.groupHeader === false){\r\n\t\t\t\tgroup.value = group.value;\r\n\t\t\t}else{\r\n\t\t\t\tgroup.value = row.component._group.generator(group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tcellEl.colSpan = group.width;\r\n\t\tcellEl.innerHTML = group.value;\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-group\");\r\n\t\trowEl.classList.add(\"tabulator-group-level-\" + row.indent);\r\n\r\n\t\tif(group.component.isVisible()){\r\n\t\t\trowEl.classList.add(\"tabulator-group-visible\");\r\n\t\t}\r\n\r\n\t\tthis.mapElementStyles(styles.firstGroup, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\t\tthis.mapElementStyles(styles.firstGroup, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\"]);\r\n\r\n\t\trowEl.appendChild(cellEl);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateCalcElement(row, setup, styles){\r\n\t\tvar rowEl = this.genereateRowElement(row, setup, styles);\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-calcs\");\r\n\t\tthis.mapElementStyles(styles.calcRow, rowEl, [\"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\", \"background-color\"]);\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateRowElement(row, setup, styles){\r\n\t\tvar rowEl = document.createElement(\"tr\");\r\n\r\n\t\trowEl.classList.add(\"tabulator-print-table-row\");\r\n\r\n\t\trow.columns.forEach((col) => {\r\n\r\n\t\t\tif(col){\r\n\t\t\t\tvar cellEl = document.createElement(\"td\"),\r\n\t\t\t\tcolumn = col.component._column,\r\n\t\t\t\tvalue = col.value;\r\n\r\n\t\t\t\tvar cellWrapper = {\r\n\t\t\t\t\tmodules:{},\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn cellEl;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetData:function(){\r\n\t\t\t\t\t\treturn row.component.getData();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn row.component;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetComponent:function(){\r\n\t\t\t\t\t\treturn cellWrapper;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcolumn:column,\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar classNames = column.definition.cssClass ? column.definition.cssClass.split(\" \") : [];\r\n\r\n\t\t\t\tclassNames.forEach(function(className) {\r\n\t\t\t\t\tcellEl.classList.add(className);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(this.table.modExists(\"format\") && this.config.formatCells !== false){\r\n\t\t\t\t\tvalue = this.table.modules.format.formatExportValue(cellWrapper, this.colVisProp);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\t\tcase \"object\":\r\n\t\t\t\t\t\tvalue = JSON.stringify(value);\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\t\tcase \"null\":\r\n\t\t\t\t\t\tvalue = \"\";\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tvalue = value;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(value instanceof Node){\r\n\t\t\t\t\tcellEl.appendChild(value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcellEl.innerHTML = value;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(styles.firstCell){\r\n\t\t\t\t\tthis.mapElementStyles(styles.firstCell, cellEl, [\"padding-top\", \"padding-left\", \"padding-right\", \"padding-bottom\", \"border-top\", \"border-left\", \"border-right\", \"border-bottom\", \"color\", \"font-weight\", \"font-family\", \"font-size\"]);\r\n\r\n\t\t\t\t\tif(column.definition.align){\r\n\t\t\t\t\t\tcellEl.style.textAlign = column.definition.align;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(this.table.options.dataTree && this.config.dataTree !== false){\r\n\t\t\t\t\tif((setup.treeElementField && setup.treeElementField == column.field) || (!setup.treeElementField && i == 0)){\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.controlEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.controlEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tif(row.component._row.modules.dataTree.branchEl){\r\n\t\t\t\t\t\t\tcellEl.insertBefore(row.component._row.modules.dataTree.branchEl.cloneNode(true), cellEl.firstChild);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\trowEl.appendChild(cellEl);\r\n\r\n\t\t\t\tif(cellWrapper.modules.format && cellWrapper.modules.format.renderedCallback){\r\n\t\t\t\t\tcellWrapper.modules.format.renderedCallback();\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(setup.rowFormatter && this.config.formatCells !== false){\r\n\t\t\t\t\tsetup.rowFormatter(row.component);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn rowEl;\r\n\t}\r\n\r\n\tgenereateHTMLTable(list){\r\n\t\tvar holder = document.createElement(\"div\");\r\n\r\n\t\tholder.appendChild(this.genereateTableElement(list));\r\n\r\n\t\treturn holder.innerHTML;\r\n\t}\r\n\r\n\tgetHtml(visible, style, config, colVisProp){\r\n\t\tvar list = this.generateExportList(config || this.table.options.htmlOutputConfig, style, visible, colVisProp || \"htmlOutput\");\r\n\r\n\t\treturn this.genereateHTMLTable(list);\r\n\t}\r\n\r\n\tmapElementStyles(from, to, props){\r\n\t\tif(this.cloneTableStyle && from && to){\r\n\r\n\t\t\tvar lookup = {\r\n\t\t\t\t\"background-color\" : \"backgroundColor\",\r\n\t\t\t\t\"color\" : \"fontColor\",\r\n\t\t\t\t\"width\" : \"width\",\r\n\t\t\t\t\"font-weight\" : \"fontWeight\",\r\n\t\t\t\t\"font-family\" : \"fontFamily\",\r\n\t\t\t\t\"font-size\" : \"fontSize\",\r\n\t\t\t\t\"text-align\" : \"textAlign\",\r\n\t\t\t\t\"border-top\" : \"borderTop\",\r\n\t\t\t\t\"border-left\" : \"borderLeft\",\r\n\t\t\t\t\"border-right\" : \"borderRight\",\r\n\t\t\t\t\"border-bottom\" : \"borderBottom\",\r\n\t\t\t\t\"padding-top\" : \"paddingTop\",\r\n\t\t\t\t\"padding-left\" : \"paddingLeft\",\r\n\t\t\t\t\"padding-right\" : \"paddingRight\",\r\n\t\t\t\t\"padding-bottom\" : \"paddingBottom\",\r\n\t\t\t};\r\n\r\n\t\t\tif(window.getComputedStyle){\r\n\t\t\t\tvar fromStyle = window.getComputedStyle(from);\r\n\r\n\t\t\t\tprops.forEach(function(prop){\r\n\t\t\t\t\tto.style[lookup[prop]] = fromStyle.getPropertyValue(prop);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nExport.moduleName = \"export\";\r\n\r\nexport default Export;\r\n","export default {\r\n\r\n\t//equal to\r\n\t\"=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal == filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than\r\n\t\"<\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal < filterVal ? true : false;\r\n\t},\r\n\r\n\t//less than or equal to\r\n\t\"<=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal <= filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than\r\n\t\">\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal > filterVal ? true : false;\r\n\t},\r\n\r\n\t//greater than or equal to\r\n\t\">=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal >= filterVal ? true : false;\r\n\t},\r\n\r\n\t//not equal to\r\n\t\"!=\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\treturn rowVal != filterVal ? true : false;\r\n\t},\r\n\r\n\t\"regex\":function(filterVal, rowVal, rowData, filterParams){\r\n\r\n\t\tif(typeof filterVal == \"string\"){\r\n\t\t\tfilterVal = new RegExp(filterVal);\r\n\t\t}\r\n\r\n\t\treturn filterVal.test(rowVal);\r\n\t},\r\n\r\n\t//contains the string\r\n\t\"like\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().indexOf(filterVal.toLowerCase()) > -1;\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//contains the keywords\r\n\t\"keywords\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tvar keywords = filterVal.toLowerCase().split(typeof filterParams.separator === \"undefined\" ? \" \" : filterParams.separator),\r\n\t\tvalue = String(rowVal === null || typeof rowVal === \"undefined\" ? \"\" : rowVal).toLowerCase(),\r\n\t\tmatches = [];\r\n\r\n\t\tkeywords.forEach((keyword) =>{\r\n\t\t\tif(value.includes(keyword)){\r\n\t\t\t\tmatches.push(true);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn filterParams.matchAll ? matches.length === keywords.length : !!matches.length;\r\n\t},\r\n\r\n\t//starts with the string\r\n\t\"starts\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().startsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//ends with the string\r\n\t\"ends\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(filterVal === null || typeof filterVal === \"undefined\"){\r\n\t\t\treturn rowVal === filterVal ? true : false;\r\n\t\t}else{\r\n\t\t\tif(typeof rowVal !== 'undefined' && rowVal !== null){\r\n\t\t\t\treturn String(rowVal).toLowerCase().endsWith(filterVal.toLowerCase());\r\n\t\t\t}\r\n\t\t\telse{\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\t//in array\r\n\t\"in\":function(filterVal, rowVal, rowData, filterParams){\r\n\t\tif(Array.isArray(filterVal)){\r\n\t\t\treturn filterVal.length ? filterVal.indexOf(rowVal) > -1 : true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - filter value is not an array:\", filterVal);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFilters from './defaults/filters.js';\r\n\r\nclass Filter extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.filterList = []; //hold filter list\r\n\t\tthis.headerFilters = {}; //hold column filters\r\n\t\tthis.headerFilterColumns = []; //hold columns that use header filters\r\n\r\n\t\tthis.prevHeaderFilterChangeCheck = \"\";\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.changed = false; //has filtering changed since last render\r\n\t\tthis.tableInitialized = false;\r\n\r\n\t\tthis.registerTableOption(\"filterMode\", \"local\"); //local or remote filtering\r\n\r\n\t\tthis.registerTableOption(\"initialFilter\", false); //initial filtering criteria\r\n\t\tthis.registerTableOption(\"initialHeaderFilter\", false); //initial header filtering criteria\r\n\t\tthis.registerTableOption(\"headerFilterLiveFilterDelay\", 300); //delay before updating column after user types in header filter\r\n\r\n\t\tthis.registerColumnOption(\"headerFilter\");\r\n\t\tthis.registerColumnOption(\"headerFilterPlaceholder\");\r\n\t\tthis.registerColumnOption(\"headerFilterParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterEmptyCheck\");\r\n\t\tthis.registerColumnOption(\"headerFilterFunc\");\r\n\t\tthis.registerColumnOption(\"headerFilterFuncParams\");\r\n\t\tthis.registerColumnOption(\"headerFilterLiveFilter\");\r\n\r\n\t\tthis.registerTableFunction(\"searchRows\", this.searchRows.bind(this));\r\n\t\tthis.registerTableFunction(\"searchData\", this.searchData.bind(this));\r\n\r\n\t\tthis.registerTableFunction(\"setFilter\", this.userSetFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"refreshFilter\", this.userRefreshFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"addFilter\", this.userAddFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"getFilters\", this.getFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterFocus\", this.userSetHeaderFilterFocus.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilterValue\", this.userGetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"setHeaderFilterValue\", this.userSetHeaderFilterValue.bind(this));\r\n\t\tthis.registerTableFunction(\"getHeaderFilters\", this.getHeaderFilters.bind(this));\r\n\t\tthis.registerTableFunction(\"removeFilter\", this.userRemoveFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearFilter\", this.userClearFilter.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHeaderFilter\", this.userClearHeaderFilter.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"headerFilterFocus\", this.setHeaderFilterFocus.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"reloadHeaderFilter\", this.reloadHeaderFilter.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"getHeaderFilterValue\", this.getHeaderFilterValue.bind(this));\r\n\t\tthis.registerComponentFunction(\"column\", \"setHeaderFilterValue\", this.setHeaderFilterValue.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumnHeaderFilter.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-before\", this.hideHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"column-width-fit-after\", this.showHeaderFilterElements.bind(this));\r\n\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\r\n\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\tthis.subscribe(\"data-params\", this.remoteFilterParams.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerDataHandler(this.filter.bind(this), 10);\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tif(this.table.options.initialFilter){\r\n\t\t\tthis.setFilter(this.table.options.initialFilter);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.initialHeaderFilter){\r\n\t\t\tthis.table.options.initialHeaderFilter.forEach((item) => {\r\n\r\n\t\t\t\tvar column = this.table.columnManager.findColumn(item.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tthis.setHeaderFilterValue(column, item.value);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", item.field);\r\n\t\t\t\t\treturn false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis.tableInitialized = true;\r\n\t}\r\n\r\n\tremoteFilterParams(data, config, silent, params){\r\n\t\tparams.filter = this.getFilters(true, true);\r\n\t\treturn params;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t//set standard filters\r\n\tuserSetFilter(field, type, value, params){\r\n\t\tthis.setFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//set standard filters\r\n\tuserRefreshFilter(){\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//add filter to array\r\n\tuserAddFilter(field, type, value, params){\r\n\t\tthis.addFilter(field, type, value, params);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\tuserSetHeaderFilterFocus(field){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterFocus(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetHeaderFilterValue(field) {\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\treturn this.getHeaderFilterValue(column);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t}\r\n\t}\r\n\r\n\tuserSetHeaderFilterValue(field, value){\r\n\t\tvar column = this.table.columnManager.findColumn(field);\r\n\r\n\t\tif(column){\r\n\t\t\tthis.setHeaderFilterValue(column, value);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Error - No matching column found:\", field);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tuserRemoveFilter(field, type, value){\r\n\t\tthis.removeFilter(field, type, value);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear filters\r\n\tuserClearFilter(all){\r\n\t\tthis.clearFilter(all);\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tuserClearHeaderFilter(){\r\n\t\tthis.clearHeaderFilter();\r\n\t\tthis.refreshFilter();\r\n\t}\r\n\r\n\r\n\t//search for specific row components\r\n\tsearchRows(field, type, value){\r\n\t\treturn this.search(\"rows\", field, type, value);\r\n\t}\r\n\r\n\t//search for specific data\r\n\tsearchData(field, type, value){\r\n\t\treturn this.search(\"data\", field, type, value);\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnHeaderFilter(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tif(def.headerFilter){\r\n\r\n\t\t\tif(typeof def.headerFilterPlaceholder !== \"undefined\" && def.field){\r\n\t\t\t\tthis.module(\"localize\").setHeaderFilterColumnPlaceholder(def.field, def.headerFilterPlaceholder);\r\n\t\t\t}\r\n\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//initialize column header filter\r\n\tinitializeColumn(column, value){\r\n\t\tvar self = this,\r\n\t\tfield = column.getField(),\r\n\t\tparams;\r\n\r\n\t\t//handle successfull value change\r\n\t\tfunction success(value){\r\n\t\t\tvar filterType = (column.modules.filter.tagType == \"input\" && column.modules.filter.attrType == \"text\") || column.modules.filter.tagType == \"textarea\" ? \"partial\" : \"match\",\r\n\t\t\ttype = \"\",\r\n\t\t\tfilterChangeCheck = \"\",\r\n\t\t\tfilterFunc;\r\n\r\n\t\t\tif(typeof column.modules.filter.prevSuccess === \"undefined\" || column.modules.filter.prevSuccess !== value){\r\n\r\n\t\t\t\tcolumn.modules.filter.prevSuccess = value;\r\n\r\n\t\t\t\tif(!column.modules.filter.emptyFunc(value)){\r\n\t\t\t\t\tcolumn.modules.filter.value = value;\r\n\r\n\t\t\t\t\tswitch(typeof column.definition.headerFilterFunc){\r\n\t\t\t\t\t\tcase \"string\":\r\n\t\t\t\t\t\tif(Filter.filters[column.definition.headerFilterFunc]){\r\n\t\t\t\t\t\t\ttype = column.definition.headerFilterFunc;\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\t\treturn Filter.filters[column.definition.headerFilterFunc](value, fieldVal, data, params);\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tconsole.warn(\"Header Filter Error - Matching filter function not found: \", column.definition.headerFilterFunc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tcase \"function\":\r\n\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\tvar params = column.definition.headerFilterFuncParams || {};\r\n\t\t\t\t\t\t\tvar fieldVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\tparams = typeof params === \"function\" ? params(value, fieldVal, data) : params;\r\n\r\n\t\t\t\t\t\t\treturn column.definition.headerFilterFunc(value, fieldVal, data, params);\r\n\t\t\t\t\t\t};\r\n\r\n\t\t\t\t\t\ttype = filterFunc;\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(!filterFunc){\r\n\t\t\t\t\t\tswitch(filterType){\r\n\t\t\t\t\t\t\tcase \"partial\":\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\tvar colVal = column.getFieldValue(data);\r\n\r\n\t\t\t\t\t\t\t\tif(typeof colVal !== 'undefined' && colVal !== null){\r\n\t\t\t\t\t\t\t\t\treturn String(colVal).toLowerCase().indexOf(String(value).toLowerCase()) > -1;\r\n\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\treturn false;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"like\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\t\t\treturn column.getFieldValue(data) == value;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t\ttype = \"=\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tself.headerFilters[field] = {value:value, func:filterFunc, type:type, params:params || {}};\r\n\r\n\t\t\t\t}else{\r\n\t\t\t\t\tdelete self.headerFilters[field];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterChangeCheck = JSON.stringify(self.headerFilters);\r\n\r\n\t\t\t\tif(self.prevHeaderFilterChangeCheck !== filterChangeCheck){\r\n\t\t\t\t\tself.prevHeaderFilterChangeCheck = filterChangeCheck;\r\n\r\n\t\t\t\t\tself.trackChanges();\r\n\t\t\t\t\tself.refreshFilter();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.filter = {\r\n\t\t\tsuccess:success,\r\n\t\t\tattrType:false,\r\n\t\t\ttagType:false,\r\n\t\t\temptyFunc:false,\r\n\t\t};\r\n\r\n\t\tthis.generateHeaderFilterElement(column);\r\n\t}\r\n\r\n\tgenerateHeaderFilterElement(column, initialValue, reinitialize){\r\n\t\tvar self = this,\r\n\t\tsuccess = column.modules.filter.success,\r\n\t\tfield = column.getField(),\r\n\t\tfilterElement, editor, editorElement, cellWrapper, typingTimer, searchTrigger, params;\r\n\r\n\t\t//handle aborted edit\r\n\t\tfunction cancel(){}\r\n\r\n\t\tif(column.modules.filter.headerElement && column.modules.filter.headerElement.parentNode){\r\n\t\t\tcolumn.contentElement.removeChild(column.modules.filter.headerElement.parentNode);\r\n\t\t}\r\n\r\n\t\tif(field){\r\n\r\n\t\t\t//set empty value function\r\n\t\t\tcolumn.modules.filter.emptyFunc = column.definition.headerFilterEmptyCheck || function(value){\r\n\t\t\t\treturn !value && value !== \"0\" && value !== 0;\r\n\t\t\t};\r\n\r\n\t\t\tfilterElement = document.createElement(\"div\");\r\n\t\t\tfilterElement.classList.add(\"tabulator-header-filter\");\r\n\r\n\t\t\t//set column editor\r\n\t\t\tswitch(typeof column.definition.headerFilter){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tif(self.table.modules.edit.editors[column.definition.headerFilter]){\r\n\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.headerFilter];\r\n\r\n\t\t\t\t\tif((column.definition.headerFilter === \"tick\" || column.definition.headerFilter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot build header filter, No such editor found: \", column.definition.editor);\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\teditor = column.definition.headerFilter;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"boolean\":\r\n\t\t\t\tif(column.modules.edit && column.modules.edit.editor){\r\n\t\t\t\t\teditor = column.modules.edit.editor;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(column.definition.formatter && self.table.modules.edit.editors[column.definition.formatter]){\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[column.definition.formatter];\r\n\r\n\t\t\t\t\t\tif((column.definition.formatter === \"tick\" || column.definition.formatter === \"tickCross\") && !column.definition.headerFilterEmptyCheck){\r\n\t\t\t\t\t\t\tcolumn.modules.filter.emptyFunc = function(value){\r\n\t\t\t\t\t\t\t\treturn value !== true && value !== false;\r\n\t\t\t\t\t\t\t};\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\teditor = self.table.modules.edit.editors[\"input\"];\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(editor){\r\n\r\n\t\t\t\tcellWrapper = {\r\n\t\t\t\t\tgetValue:function(){\r\n\t\t\t\t\t\treturn typeof initialValue !== \"undefined\" ? initialValue : \"\";\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetField:function(){\r\n\t\t\t\t\t\treturn column.definition.field;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetElement:function(){\r\n\t\t\t\t\t\treturn filterElement;\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetColumn:function(){\r\n\t\t\t\t\t\treturn column.getComponent();\r\n\t\t\t\t\t},\r\n\t\t\t\t\tgetRow:function(){\r\n\t\t\t\t\t\treturn {\r\n\t\t\t\t\t\t\tnormalizeHeight:function(){\r\n\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tparams = column.definition.headerFilterParams || {};\r\n\r\n\t\t\t\tparams = typeof params === \"function\" ? params.call(self.table, cellWrapper) : params;\r\n\r\n\t\t\t\teditorElement = editor.call(this.table.modules.edit, cellWrapper, function(){}, success, cancel, params);\r\n\r\n\t\t\t\tif(!editorElement){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor returned a value of false\");\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(!(editorElement instanceof Node)){\r\n\t\t\t\t\tconsole.warn(\"Filter Error - Cannot add filter to \" + field + \" column, editor should return an instance of Node, the editor returned:\", editorElement);\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//set Placeholder Text\r\n\t\t\t\tif(field){\r\n\t\t\t\t\tself.langBind(\"headerFilters|columns|\" + column.definition.field, function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", typeof value !== \"undefined\" && value ? value : self.langText(\"headerFilters|default\"));\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tself.langBind(\"headerFilters|default\", function(value){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"placeholder\", value);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\t//focus on element on click\r\n\t\t\t\teditorElement.addEventListener(\"click\", function(e){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\teditorElement.focus();\r\n\t\t\t\t});\r\n\r\n\t\t\t\teditorElement.addEventListener(\"focus\", (e) => {\r\n\t\t\t\t\tvar left = this.table.columnManager.element.scrollLeft;\r\n\r\n\t\t\t\t\tif(left !== this.table.rowManager.element.scrollLeft){\r\n\t\t\t\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t\t\tthis.table.columnManager.scrollHorizontal(left);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\t//live update filters as user types\r\n\t\t\t\ttypingTimer = false;\r\n\r\n\t\t\t\tsearchTrigger = function(e){\r\n\t\t\t\t\tif(typingTimer){\r\n\t\t\t\t\t\tclearTimeout(typingTimer);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\ttypingTimer = setTimeout(function(){\r\n\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t},self.table.options.headerFilterLiveFilterDelay);\r\n\t\t\t\t};\r\n\r\n\t\t\t\tcolumn.modules.filter.headerElement = editorElement;\r\n\t\t\t\tcolumn.modules.filter.attrType = editorElement.hasAttribute(\"type\") ? editorElement.getAttribute(\"type\").toLowerCase() : \"\" ;\r\n\t\t\t\tcolumn.modules.filter.tagType = editorElement.tagName.toLowerCase();\r\n\r\n\t\t\t\tif(column.definition.headerFilterLiveFilter !== false){\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\t!(\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'autocomplete' ||\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === 'tickCross' ||\r\n\t\t\t\t\t\t\t((column.definition.editor === 'autocomplete' ||\r\n\t\t\t\t\t\t\t\tcolumn.definition.editor === 'tickCross') &&\r\n\t\t\t\t\t\t\tcolumn.definition.headerFilter === true)\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\teditorElement.addEventListener(\"keyup\", searchTrigger);\r\n\t\t\t\t\teditorElement.addEventListener(\"search\", searchTrigger);\r\n\r\n\r\n\t\t\t\t\t//update number filtered columns on change\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"number\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"change\", function(e){\r\n\t\t\t\t\t\t\tsuccess(editorElement.value);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//change text inputs to search inputs to allow for clearing of field\r\n\t\t\t\t\tif(column.modules.filter.attrType == \"text\" && this.table.browser !== \"ie\"){\r\n\t\t\t\t\t\teditorElement.setAttribute(\"type\", \"search\");\r\n\t\t\t\t\t\t// editorElement.off(\"change blur\"); //prevent blur from triggering filter and preventing selection click\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\r\n\t\t\t\t\t//prevent input and select elements from propegating click to column sorters etc\r\n\t\t\t\t\tif(column.modules.filter.tagType == \"input\" || column.modules.filter.tagType == \"select\" || column.modules.filter.tagType == \"textarea\"){\r\n\t\t\t\t\t\teditorElement.addEventListener(\"mousedown\",function(e){\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tfilterElement.appendChild(editorElement);\r\n\r\n\t\t\t\tcolumn.contentElement.appendChild(filterElement);\r\n\r\n\t\t\t\tif(!reinitialize){\r\n\t\t\t\t\tself.headerFilterColumns.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Filter Error - Cannot add header filter, column has no field set:\", column.definition.title);\r\n\t\t}\r\n\t}\r\n\r\n\t//hide all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\thideHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//show all header filter elements (used to ensure correct column widths in \"fitData\" layout mode)\r\n\tshowHeaderFilterElements(){\r\n\t\tthis.headerFilterColumns.forEach(function(column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tcolumn.modules.filter.headerElement.style.display = '';\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//programatically set focus of header filter\r\n\tsetHeaderFilterFocus(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\tcolumn.modules.filter.headerElement.focus();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Column Filter Focus Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programmatically get value of header filter\r\n\tgetHeaderFilterValue(column){\r\n\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\treturn column.modules.filter.headerElement.value;\r\n\t\t} else {\r\n\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t}\r\n\t}\r\n\r\n\t//programatically set value of header filter\r\n\tsetHeaderFilterValue(column, value){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, value, true);\r\n\t\t\t\tcolumn.modules.filter.success(value);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\treloadHeaderFilter(column){\r\n\t\tif (column){\r\n\t\t\tif(column.modules.filter && column.modules.filter.headerElement){\r\n\t\t\t\tthis.generateHeaderFilterElement(column, column.modules.filter.value, true);\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Column Filter Error - No header filter set on column:\", column.getField());\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trefreshFilter(){\r\n\t\tif(this.tableInitialized){\r\n\t\t\tif(this.table.options.filterMode === \"remote\"){\r\n\t\t\t\tthis.reloadData();\r\n\t\t\t}else{\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\ttrackChanges(){\r\n\t\tthis.changed = true;\r\n\t\tthis.dispatch(\"filter-changed\");\r\n\t}\r\n\r\n\t//check if the filters has changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//set standard filters\r\n\tsetFilter(field, type, value, params){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tthis.addFilter(field);\r\n\t}\r\n\r\n\t//add filter to array\r\n\taddFilter(field, type, value, params){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value, params:params}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\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\tthis.changed = true;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(changed){\r\n\t\t\tthis.trackChanges();\r\n\t\t}\r\n\t}\r\n\r\n\tfindFilter(filter){\r\n\t\tvar column;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\treturn this.findSubFilters(filter);\r\n\t\t}\r\n\r\n\t\tvar filterFunc = false;\r\n\r\n\t\tif(typeof filter.field == \"function\"){\r\n\t\t\tfilterFunc = function(data){\r\n\t\t\t\treturn filter.field(data, filter.type || {})// pass params to custom filter function\r\n\t\t\t};\r\n\t\t}else{\r\n\r\n\t\t\tif(Filter.filters[filter.type]){\r\n\r\n\t\t\t\tcolumn = this.table.columnManager.getColumnByField(filter.field);\r\n\r\n\t\t\t\tif(column){\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, column.getFieldValue(data), data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}else{\r\n\t\t\t\t\tfilterFunc = function(data){\r\n\t\t\t\t\t\treturn Filter.filters[filter.type](filter.value, data[filter.field], data, filter.params || {});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No such filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tfilter.func = filterFunc;\r\n\r\n\t\treturn filter.func ? filter : false;\r\n\t}\r\n\r\n\tfindSubFilters(filters){\r\n\t\tvar output = [];\r\n\r\n\t\tfilters.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\toutput.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : false;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetFilters(all, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tif(all){\r\n\t\t\toutput = this.getHeaderFilters();\r\n\t\t}\r\n\r\n\t\tif(ajax){\r\n\t\t\toutput.forEach(function(item){\r\n\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\toutput = output.concat(this.filtersToArray(this.filterList, ajax));\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//filter to Object\r\n\tfiltersToArray(filterList, ajax){\r\n\t\tvar output = [];\r\n\r\n\t\tfilterList.forEach((filter) => {\r\n\t\t\tvar item;\r\n\r\n\t\t\tif(Array.isArray(filter)){\r\n\t\t\t\toutput.push(this.filtersToArray(filter, ajax));\r\n\t\t\t}else{\r\n\t\t\t\titem = {field:filter.field, type:filter.type, value:filter.value}\r\n\r\n\t\t\t\tif(ajax){\r\n\t\t\t\t\tif(typeof item.type == \"function\"){\r\n\t\t\t\t\t\titem.type = \"function\";\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(item);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//get all filters\r\n\tgetHeaderFilters(){\r\n\t\tvar output = [];\r\n\r\n\t\tfor(var key in this.headerFilters){\r\n\t\t\toutput.push({field:key, type:this.headerFilters[key].type, value:this.headerFilters[key].value});\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//remove filter from array\r\n\tremoveFilter(field, type, value){\r\n\t\tvar changed = false;\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tvar index = -1;\r\n\r\n\t\t\tif(typeof filter.field == \"object\"){\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter === element;\r\n\t\t\t\t});\r\n\t\t\t}else{\r\n\t\t\t\tindex = this.filterList.findIndex((element) => {\r\n\t\t\t\t\treturn filter.field === element.field && filter.type === element.type && filter.value === element.value;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.filterList.splice(index, 1);\r\n\t\t\t\tchanged = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Filter Error - No matching filter type found, ignoring: \", filter.type);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear filters\r\n\tclearFilter(all){\r\n\t\tthis.filterList = [];\r\n\r\n\t\tif(all){\r\n\t\t\tthis.clearHeaderFilter();\r\n\t\t}\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//clear header filters\r\n\tclearHeaderFilter(){\r\n\t\tthis.headerFilters = {};\r\n\t\tthis.prevHeaderFilterChangeCheck = \"{}\";\r\n\r\n\t\tthis.headerFilterColumns.forEach((column) => {\r\n\t\t\tif(typeof column.modules.filter.value !== \"undefined\"){\r\n\t\t\t\tdelete column.modules.filter.value;\r\n\t\t\t}\r\n\t\t\tcolumn.modules.filter.prevSuccess = undefined;\r\n\t\t\tthis.reloadHeaderFilter(column);\r\n\t\t});\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\t//search data and return matching rows\r\n\tsearch (searchType, field, type, value){\r\n\t\tvar activeRows = [],\r\n\t\tfilterList = [];\r\n\r\n\t\tif(!Array.isArray(field)){\r\n\t\t\tfield = [{field:field, type:type, value:value}];\r\n\t\t}\r\n\r\n\t\tfield.forEach((filter) => {\r\n\t\t\tfilter = this.findFilter(filter);\r\n\r\n\t\t\tif(filter){\r\n\t\t\t\tfilterList.push(filter);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\tvar match = true;\r\n\r\n\t\t\tfilterList.forEach((filter) => {\r\n\t\t\t\tif(!this.filterRecurse(filter, row.getData())){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tactiveRows.push(searchType === \"data\" ? row.getData(\"data\") : row.getComponent());\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter row array\r\n\tfilter(rowList, filters){\r\n\t\tvar activeRows = [],\r\n\t\tactiveRowComponents = [];\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltering\")){\r\n\t\t\tthis.dispatchExternal(\"dataFiltering\", this.getFilters());\r\n\t\t}\r\n\r\n\t\tif(this.table.options.filterMode !== \"remote\" && (this.filterList.length || Object.keys(this.headerFilters).length)){\r\n\r\n\t\t\trowList.forEach((row) => {\r\n\t\t\t\tif(this.filterRow(row)){\r\n\t\t\t\t\tactiveRows.push(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t}else{\r\n\t\t\tactiveRows = rowList.slice(0);\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataFiltered\")){\r\n\r\n\t\t\tactiveRows.forEach((row) => {\r\n\t\t\t\tactiveRowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataFiltered\", this.getFilters(), activeRowComponents);\r\n\t\t}\r\n\r\n\t\treturn activeRows;\r\n\t}\r\n\r\n\t//filter individual row\r\n\tfilterRow(row, filters){\r\n\t\tvar match = true,\r\n\t\tdata = row.getData();\r\n\r\n\t\tthis.filterList.forEach((filter) => {\r\n\t\t\tif(!this.filterRecurse(filter, data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\tfor(var field in this.headerFilters){\r\n\t\t\tif(!this.headerFilters[field].func(data)){\r\n\t\t\t\tmatch = false;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tfilterRecurse(filter, data){\r\n\t\tvar match = false;\r\n\r\n\t\tif(Array.isArray(filter)){\r\n\t\t\tfilter.forEach((subFilter) => {\r\n\t\t\t\tif(this.filterRecurse(subFilter, data)){\r\n\t\t\t\t\tmatch = true;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tmatch = filter.func(data);\r\n\t\t}\r\n\r\n\t\treturn match;\r\n\t}\r\n}\r\n\r\nFilter.moduleName = \"filter\";\r\n\r\n//load defaults\r\nFilter.filters = defaultFilters;\r\n\r\nexport default Filter;","import plaintext from './formatters/plaintext.js';\r\nimport html from './formatters/html.js';\r\nimport textarea from './formatters/textarea.js';\r\nimport money from './formatters/money.js';\r\nimport link from './formatters/link.js';\r\nimport image from './formatters/image.js';\r\nimport tickCross from './formatters/tickCross.js';\r\nimport datetime from './formatters/datetime.js';\r\nimport datetimediff from './formatters/datetimediff.js';\r\nimport lookup from './formatters/lookup.js';\r\nimport star from './formatters/star.js';\r\nimport traffic from './formatters/traffic.js';\r\nimport progress from './formatters/progress.js';\r\nimport color from './formatters/color.js';\r\nimport buttonTick from './formatters/buttonTick.js';\r\nimport buttonCross from './formatters/buttonCross.js';\r\nimport rownum from './formatters/rownum.js';\r\nimport handle from './formatters/handle.js';\r\nimport responsiveCollapse from './formatters/responsiveCollapse.js';\r\nimport rowSelection from './formatters/rowSelection.js';\r\n\r\nexport default {\r\n\tplaintext:plaintext,\r\n\thtml:html,\r\n\ttextarea:textarea,\r\n\tmoney:money,\r\n\tlink:link,\r\n\timage:image,\r\n\ttickCross:tickCross,\r\n\tdatetime:datetime,\r\n\tdatetimediff:datetimediff,\r\n\tlookup:lookup,\r\n\tstar:star,\r\n\ttraffic:traffic,\r\n\tprogress:progress,\r\n\tcolor:color,\r\n\tbuttonTick:buttonTick,\r\n\tbuttonCross:buttonCross,\r\n\trownum:rownum,\r\n\thandle:handle,\r\n\tresponsiveCollapse:responsiveCollapse,\r\n\trowSelection:rowSelection,\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn cell.getValue();\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.whiteSpace = \"pre-wrap\";\r\n\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar floatVal = parseFloat(cell.getValue()),\r\n\tsign = \"\",\r\n\tnumber, integer, decimal, rgx;\r\n\r\n\tvar decimalSym = formatterParams.decimal || \".\";\r\n\tvar thousandSym = formatterParams.thousand || \",\";\r\n\tvar negativeSign = formatterParams.negativeSign || \"-\";\r\n\tvar symbol = formatterParams.symbol || \"\";\r\n\tvar after = !!formatterParams.symbolAfter;\r\n\tvar precision = typeof formatterParams.precision !== \"undefined\" ? formatterParams.precision : 2;\r\n\r\n\tif(isNaN(floatVal)){\r\n\t\treturn this.emptyToSpace(this.sanitizeHTML(cell.getValue()));\r\n\t}\r\n\r\n\tif(floatVal < 0){\r\n\t\tfloatVal = Math.abs(floatVal);\r\n\t\tsign = negativeSign;\r\n\t}\r\n\r\n\tnumber = precision !== false ? floatVal.toFixed(precision) : floatVal;\r\n\tnumber = String(number).split(\".\");\r\n\r\n\tinteger = number[0];\r\n\tdecimal = number.length > 1 ? decimalSym + number[1] : \"\";\r\n\r\n\trgx = /(\\d+)(\\d{3})/;\r\n\r\n\twhile (rgx.test(integer)){\r\n\t\tinteger = integer.replace(rgx, \"$1\" + thousandSym + \"$2\");\r\n\t}\r\n\r\n\treturn after ? sign + integer + decimal + symbol : sign + symbol + integer + decimal;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\turlPrefix = formatterParams.urlPrefix || \"\",\r\n\tdownload = formatterParams.download,\r\n\tlabel = value,\r\n\tel = document.createElement(\"a\"),\r\n\tdata;\r\n\r\n\tif(formatterParams.labelField){\r\n\t\tdata = cell.getData();\r\n\t\tlabel = data[formatterParams.labelField];\r\n\t}\r\n\r\n\tif(formatterParams.label){\r\n\t\tswitch(typeof formatterParams.label){\r\n\t\t\tcase \"string\":\r\n\t\t\tlabel = formatterParams.label;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tlabel = formatterParams.label(cell);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tif(label){\r\n\t\tif(formatterParams.urlField){\r\n\t\t\tdata = cell.getData();\r\n\t\t\tvalue = data[formatterParams.urlField];\r\n\t\t}\r\n\r\n\t\tif(formatterParams.url){\r\n\t\t\tswitch(typeof formatterParams.url){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tvalue = formatterParams.url;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tvalue = formatterParams.url(cell);\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tel.setAttribute(\"href\", urlPrefix + value);\r\n\r\n\t\tif(formatterParams.target){\r\n\t\t\tel.setAttribute(\"target\", formatterParams.target);\r\n\t\t}\r\n\r\n\t\tif(formatterParams.download){\r\n\r\n\t\t\tif(typeof download == \"function\"){\r\n\t\t\t\tdownload = download(cell);\r\n\t\t\t}else{\r\n\t\t\t\tdownload = download === true ? \"\" : download;\r\n\t\t\t}\r\n\r\n\t\t\tel.setAttribute(\"download\", download);\r\n\t\t}\r\n\r\n\t\tel.innerHTML = this.emptyToSpace(this.sanitizeHTML(label));\r\n\r\n\t\treturn el;\r\n\t}else{\r\n\t\treturn \" \";\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar el = document.createElement(\"img\"),\r\n\tsrc = cell.getValue();\r\n\r\n\tif(formatterParams.urlPrefix){\r\n\t\tsrc = formatterParams.urlPrefix + cell.getValue();\r\n\t}\r\n\r\n\tif(formatterParams.urlSuffix){\r\n\t\tsrc = src + formatterParams.urlSuffix;\r\n\t}\r\n\r\n\tel.setAttribute(\"src\", src);\r\n\r\n\tswitch(typeof formatterParams.height){\r\n\t\tcase \"number\":\r\n\t\tel.style.height = formatterParams.height + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.height = formatterParams.height;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tswitch(typeof formatterParams.width){\r\n\t\tcase \"number\":\r\n\t\tel.style.width = formatterParams.width + \"px\";\r\n\t\tbreak;\r\n\r\n\t\tcase \"string\":\r\n\t\tel.style.width = formatterParams.width;\r\n\t\tbreak;\r\n\t}\r\n\r\n\tel.addEventListener(\"load\", function(){\r\n\t\tcell.getRow().normalizeHeight();\r\n\t});\r\n\r\n\treturn el;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tempty = formatterParams.allowEmpty,\r\n\ttruthy = formatterParams.allowTruthy,\r\n\ttick = typeof formatterParams.tickElement !== \"undefined\" ? formatterParams.tickElement : '',\r\n\tcross = typeof formatterParams.crossElement !== \"undefined\" ? formatterParams.crossElement : '';\r\n\r\n\tif((truthy && value) || (value === true || value === \"true\" || value === \"True\" || value === 1 || value === \"1\")){\r\n\t\telement.setAttribute(\"aria-checked\", true);\r\n\t\treturn tick || \"\";\r\n\t}else{\r\n\t\tif(empty && (value === \"null\" || value === \"\" || value === null || typeof value === \"undefined\")){\r\n\t\t\telement.setAttribute(\"aria-checked\", \"mixed\");\r\n\t\t\treturn \"\";\r\n\t\t}else{\r\n\t\t\telement.setAttribute(\"aria-checked\", false);\r\n\t\t\treturn cross || \"\";\r\n\t\t}\r\n\t}\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\r\n\tvar\toutputFormat = formatterParams.outputFormat || \"dd/MM/yyyy HH:mm:ss\";\r\n\tvar\tinvalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\tvar newDatetime = inputFormat === \"iso\" ? DT.fromISO(String(value)) : DT.fromFormat(String(value), inputFormat);\r\n\r\n\t\tif(newDatetime.isValid){\r\n\r\n\t\t\tif(formatterParams.timezone){\r\n\t\t\t\tnewDatetime = newDatetime.shiftTimezone(formatterParams.timezone);\r\n\t\t\t}\r\n\r\n\t\t\treturn newDatetime.toFormat(outputFormat);\r\n\t\t}else{\r\n\r\n\t\t\tif(invalid === true || !value){\r\n\t\t\t\treturn value;\r\n\t\t\t}else if(typeof invalid === \"function\"){\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t}else{\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetime' formatter is dependant on luxon.js\");\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar inputFormat = formatterParams.inputFormat || \"yyyy-MM-dd HH:mm:ss\";\r\n\tvar invalid = typeof formatterParams.invalidPlaceholder !== \"undefined\" ? formatterParams.invalidPlaceholder : \"\";\r\n\tvar suffix = typeof formatterParams.suffix !== \"undefined\" ? formatterParams.suffix : false;\r\n\tvar unit = typeof formatterParams.unit !== \"undefined\" ? formatterParams.unit : \"days\";\r\n\tvar humanize = typeof formatterParams.humanize !== \"undefined\" ? formatterParams.humanize : false;\r\n\tvar date = typeof formatterParams.date !== \"undefined\" ? formatterParams.date : DT.now();\r\n\tvar value = cell.getValue();\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\t\r\n\t\tvar newDatetime = inputFormat === \"iso\" ? DT.fromISO(String(value)) : DT.fromFormat(String(value), inputFormat);\r\n\r\n\t\tif (newDatetime.isValid){\r\n\t\t\tif(humanize){\r\n\t\t\t\t// return moment.duration(newDatetime.diff(date)).humanize(suffix);\r\n\t\t\t}else{\r\n\t\t\t\treturn parseInt(newDatetime.diff(date, unit)[unit]) + (suffix ? \" \" + suffix : \"\");\r\n\t\t\t}\r\n\t\t} else {\r\n\r\n\t\t\tif (invalid === true) {\r\n\t\t\t\treturn value;\r\n\t\t\t} else if (typeof invalid === \"function\") {\r\n\t\t\t\treturn invalid(value);\r\n\t\t\t} else {\r\n\t\t\t\treturn invalid;\r\n\t\t\t}\r\n\t\t}\r\n\t}else{\r\n\t\tconsole.error(\"Format Error - 'datetimediff' formatter is dependant on luxon.js\");\r\n\t}\r\n};","export default function (cell, formatterParams, onRendered) {\r\n\tvar value = cell.getValue();\r\n\r\n\tif (typeof formatterParams[value] === \"undefined\") {\r\n\t\tconsole.warn('Missing display value for ' + value);\r\n\t\treturn value;\r\n\t}\r\n\r\n\treturn formatterParams[value];\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = cell.getValue(),\r\n\telement = cell.getElement(),\r\n\tmaxStars = formatterParams && formatterParams.stars ? formatterParams.stars : 5,\r\n\tstars = document.createElement(\"span\"),\r\n\tstar = document.createElementNS('http://www.w3.org/2000/svg', \"svg\"),\r\n\tstarActive = '',\r\n\tstarInactive = '';\r\n\r\n\t//style stars holder\r\n\tstars.style.verticalAlign = \"middle\";\r\n\r\n\t//style star\r\n\tstar.setAttribute(\"width\", \"14\");\r\n\tstar.setAttribute(\"height\", \"14\");\r\n\tstar.setAttribute(\"viewBox\", \"0 0 512 512\");\r\n\tstar.setAttribute(\"xml:space\", \"preserve\");\r\n\tstar.style.padding = \"0 1px\";\r\n\r\n\tvalue = value && !isNaN(value) ? parseInt(value) : 0;\r\n\r\n\tvalue = Math.max(0, Math.min(value, maxStars));\r\n\r\n\tfor(var i=1;i<= maxStars;i++){\r\n\t\tvar nextStar = star.cloneNode(true);\r\n\t\tnextStar.innerHTML = i <= value ? starActive : starInactive;\r\n\r\n\t\tstars.appendChild(nextStar);\r\n\t}\r\n\r\n\telement.style.whiteSpace = \"nowrap\";\r\n\telement.style.overflow = \"hidden\";\r\n\telement.style.textOverflow = \"ellipsis\";\r\n\r\n\telement.setAttribute(\"aria-label\", value);\r\n\r\n\treturn stars;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\tel = document.createElement(\"span\"),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tcolors = formatterParams && typeof formatterParams.color !== \"undefined\" ? formatterParams.color : [\"red\", \"orange\", \"green\"],\r\n\tcolor = \"#666666\",\r\n\tpercent, percentValue;\r\n\r\n\tif(isNaN(value) || typeof cell.getValue() === \"undefined\"){\r\n\t\treturn;\r\n\t}\r\n\r\n\tel.classList.add(\"tabulator-traffic-light\");\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set color\r\n\tswitch(typeof colors){\r\n\t\tcase \"string\":\r\n\t\tcolor = colors;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = colors(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(colors)){\r\n\t\t\tvar unit = 100 / colors.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, colors.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = colors[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tel.style.backgroundColor = color;\r\n\r\n\treturn el;\r\n};","import CellComponent from '../../../../core/cell/CellComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){ //progress bar\r\n\tvar value = this.sanitizeHTML(cell.getValue()) || 0,\r\n\telement = cell.getElement(),\r\n\tmax = formatterParams && formatterParams.max ? formatterParams.max : 100,\r\n\tmin = formatterParams && formatterParams.min ? formatterParams.min : 0,\r\n\tlegendAlign = formatterParams && formatterParams.legendAlign ? formatterParams.legendAlign : \"center\",\r\n\tpercent, percentValue, color, legend, legendColor, top, left, right, bottom;\r\n\r\n\t//make sure value is in range\r\n\tpercentValue = parseFloat(value) <= max ? parseFloat(value) : max;\r\n\tpercentValue = parseFloat(percentValue) >= min ? parseFloat(percentValue) : min;\r\n\r\n\t//workout percentage\r\n\tpercent = (max - min) / 100;\r\n\tpercentValue = Math.round((percentValue - min) / percent);\r\n\r\n\t//set bar color\r\n\tswitch(typeof formatterParams.color){\r\n\t\tcase \"string\":\r\n\t\tcolor = formatterParams.color;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tcolor = formatterParams.color(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.color)){\r\n\t\t\tvar unit = 100 / formatterParams.color.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.color.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tcolor = formatterParams.color[index];\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\tdefault:\r\n\t\tcolor = \"#2DC214\";\r\n\t}\r\n\r\n\t//generate legend\r\n\tswitch(typeof formatterParams.legend){\r\n\t\tcase \"string\":\r\n\t\tlegend = formatterParams.legend;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegend = formatterParams.legend(value);\r\n\t\tbreak;\r\n\t\tcase \"boolean\":\r\n\t\tlegend = value;\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegend = false;\r\n\t}\r\n\r\n\t//set legend color\r\n\tswitch(typeof formatterParams.legendColor){\r\n\t\tcase \"string\":\r\n\t\tlegendColor = formatterParams.legendColor;\r\n\t\tbreak;\r\n\t\tcase \"function\":\r\n\t\tlegendColor = formatterParams.legendColor(value);\r\n\t\tbreak;\r\n\t\tcase \"object\":\r\n\t\tif(Array.isArray(formatterParams.legendColor)){\r\n\t\t\tvar unit = 100 / formatterParams.legendColor.length;\r\n\t\t\tvar index = Math.floor(percentValue / unit);\r\n\r\n\t\t\tindex = Math.min(index, formatterParams.legendColor.length - 1);\r\n\t\t\tindex = Math.max(index, 0);\r\n\t\t\tlegendColor = formatterParams.legendColor[index];\r\n\t\t}\r\n\t\tbreak;\r\n\t\tdefault:\r\n\t\tlegendColor = \"#000\";\r\n\t}\r\n\r\n\telement.style.minWidth = \"30px\";\r\n\telement.style.position = \"relative\";\r\n\r\n\telement.setAttribute(\"aria-label\", percentValue);\r\n\r\n\tvar barEl = document.createElement(\"div\");\r\n\tbarEl.style.display = \"inline-block\";\r\n\tbarEl.style.position = \"absolute\";\r\n\tbarEl.style.width = percentValue + \"%\";\r\n\tbarEl.style.backgroundColor = color;\r\n\tbarEl.style.height = \"100%\";\r\n\r\n\tbarEl.setAttribute('data-max', max);\r\n\tbarEl.setAttribute('data-min', min);\r\n\r\n\tvar barContainer = document.createElement(\"div\");\r\n\tbarContainer.style.position = \"relative\";\r\n\tbarContainer.style.width = \"100%\";\r\n\tbarContainer.style.height = \"100%\";\r\n\r\n\tif(legend){\r\n\t\tvar legendEl = document.createElement(\"div\");\r\n\t\tlegendEl.style.position = \"absolute\";\r\n\t\tlegendEl.style.top = 0;\r\n\t\tlegendEl.style.left = 0;\r\n\t\tlegendEl.style.textAlign = legendAlign;\r\n\t\tlegendEl.style.width = \"100%\";\r\n\t\tlegendEl.style.color = legendColor;\r\n\t\tlegendEl.innerHTML = legend;\r\n\t}\r\n\r\n\tonRendered(function(){\r\n\r\n\t\t//handle custom element needed if formatter is to be included in printed/downloaded output\r\n\t\tif(!(cell instanceof CellComponent)){\r\n\t\t\tvar holderEl = document.createElement(\"div\");\r\n\t\t\tholderEl.style.position = \"absolute\";\r\n\t\t\tholderEl.style.top = \"4px\";\r\n\t\t\tholderEl.style.bottom = \"4px\";\r\n\t\t\tholderEl.style.left = \"4px\";\r\n\t\t\tholderEl.style.right = \"4px\";\r\n\r\n\t\t\telement.appendChild(holderEl);\r\n\r\n\t\t\telement = holderEl;\r\n\t\t}\r\n\r\n\t\telement.appendChild(barContainer);\r\n\t\tbarContainer.appendChild(barEl);\r\n\r\n\t\tif(legend){\r\n\t\t\tbarContainer.appendChild(legendEl);\r\n\t\t}\r\n\t});\r\n\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().style.backgroundColor = this.sanitizeHTML(cell.getValue());\r\n\treturn \"\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn '';\r\n};","export default function(cell, formatterParams, onRendered){\r\n\treturn this.table.rowManager.activeRows.indexOf(cell.getRow()._getSelf()) + 1;\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\treturn \"
\";\r\n};","export default function(cell, formatterParams, onRendered){\r\n\tvar open = false,\r\n\tel = document.createElement(\"div\"),\r\n\tconfig = cell.getRow()._row.modules.responsiveLayout;\r\n\r\n\tel.classList.add(\"tabulator-responsive-collapse-toggle\");\r\n\tel.innerHTML = \"+-\";\r\n\r\n\tcell.getElement().classList.add(\"tabulator-row-handle\");\r\n\r\n\tfunction toggleList(isOpen){\r\n\t\tvar collapseEl = config.element;\r\n\r\n\t\tconfig.open = isOpen;\r\n\r\n\t\tif(collapseEl){\r\n\r\n\t\t\tif(config.open){\r\n\t\t\t\tel.classList.add(\"open\");\r\n\t\t\t\tcollapseEl.style.display = '';\r\n\t\t\t}else{\r\n\t\t\t\tel.classList.remove(\"open\");\r\n\t\t\t\tcollapseEl.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tel.addEventListener(\"click\", function(e){\r\n\t\te.stopImmediatePropagation();\r\n\t\ttoggleList(!config.open);\r\n\t});\r\n\r\n\ttoggleList(config.open);\r\n\r\n\treturn el;\r\n};","import RowComponent from '../../../../core/row/RowComponent.js';\r\n\r\nexport default function(cell, formatterParams, onRendered){\r\n\tvar checkbox = document.createElement(\"input\");\r\n\r\n\tcheckbox.type = 'checkbox';\r\n\r\n\tif(this.table.modExists(\"selectRow\", true)){\r\n\r\n\t\tcheckbox.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tif(typeof cell.getRow == 'function'){\r\n\t\t\tvar row = cell.getRow();\r\n\r\n\t\t\tif(row instanceof RowComponent){\r\n\r\n\t\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\trow.toggleSelect();\r\n\t\t\t\t});\r\n\r\n\t\t\t\tcheckbox.checked = row.isSelected && row.isSelected();\r\n\t\t\t\tthis.table.modules.selectRow.registerRowSelectCheckbox(row, checkbox);\r\n\t\t\t}else{\r\n\t\t\t\tcheckbox = \"\";\r\n\t\t\t}\r\n\t\t}else {\r\n\t\t\tcheckbox.addEventListener(\"change\", (e) => {\r\n\t\t\t\tif(this.table.modules.selectRow.selectedRows.length){\r\n\t\t\t\t\tthis.table.deselectRow();\r\n\t\t\t\t}else {\r\n\t\t\t\t\tthis.table.selectRow(formatterParams.rowRange);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.modules.selectRow.registerHeaderSelectCheckbox(checkbox);\r\n\t\t}\r\n\t}\r\n\r\n\treturn checkbox;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultFormatters from './defaults/formatters.js';\r\n\r\nclass Format extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.registerColumnOption(\"formatter\");\r\n\t\tthis.registerColumnOption(\"formatterParams\");\r\n\r\n\t\tthis.registerColumnOption(\"formatterPrint\");\r\n\t\tthis.registerColumnOption(\"formatterPrintParams\");\r\n\t\tthis.registerColumnOption(\"formatterClipboard\");\r\n\t\tthis.registerColumnOption(\"formatterClipboardParams\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutput\");\r\n\t\tthis.registerColumnOption(\"formatterHtmlOutputParams\");\r\n\t\tthis.registerColumnOption(\"titleFormatter\");\r\n\t\tthis.registerColumnOption(\"titleFormatterParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-format\", this.formatValue.bind(this));\r\n\t\tthis.subscribe(\"cell-rendered\", this.cellRendered.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-format\", this.formatHeader.bind(this));\r\n\t}\r\n\r\n\t//initialize column formatter\r\n\tinitializeColumn(column){\r\n\t\tcolumn.modules.format = this.lookupFormatter(column, \"\");\r\n\r\n\t\tif(typeof column.definition.formatterPrint !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.print = this.lookupFormatter(column, \"Print\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterClipboard !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.clipboard = this.lookupFormatter(column, \"Clipboard\");\r\n\t\t}\r\n\r\n\t\tif(typeof column.definition.formatterHtmlOutput !== \"undefined\"){\r\n\t\t\tcolumn.modules.format.htmlOutput = this.lookupFormatter(column, \"HtmlOutput\");\r\n\t\t}\r\n\t}\r\n\r\n\tlookupFormatter(column, type){\r\n\t\tvar config = {params:column.definition[\"formatter\" + type + \"Params\"] || {}},\r\n\t\tformatter = column.definition[\"formatter\" + type];\r\n\r\n\t\t//set column formatter\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tconfig.formatter = Format.formatters[formatter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tconfig.formatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tconfig.formatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn config;\r\n\t}\r\n\r\n\tcellRendered(cell){\r\n\t\tif(cell.modules.format && cell.modules.format.renderedCallback && !cell.modules.format.rendered){\r\n\t\t\tcell.modules.format.renderedCallback();\r\n\t\t\tcell.modules.format.rendered = true;\r\n\t\t}\r\n\t}\r\n\r\n\t//return a formatted value for a column header\r\n\tformatHeader(column, title, el){\r\n\t\tvar formatter, params, onRendered, mockCell;\r\n\r\n\t\tif(column.definition.titleFormatter){\r\n\t\t\tformatter = this.getFormatter(column.definition.titleFormatter);\r\n\r\n\t\t\tonRendered = (callback) => {\r\n\t\t\t\tcolumn.titleFormatterRendered = callback;\r\n\t\t\t};\r\n\r\n\t\t\tmockCell = {\r\n\t\t\t\tgetValue:function(){\r\n\t\t\t\t\treturn title;\r\n\t\t\t\t},\r\n\t\t\t\tgetElement:function(){\r\n\t\t\t\t\treturn el;\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tparams = column.definition.titleFormatterParams || {};\r\n\r\n\t\t\tparams = typeof params === \"function\" ? params() : params;\r\n\r\n\t\t\treturn formatter.call(this, mockCell, params, onRendered);\r\n\t\t}else{\r\n\t\t\treturn title;\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t//return a formatted value for a cell\r\n\tformatValue(cell){\r\n\t\tvar component = cell.getComponent(),\r\n\t\tparams = typeof cell.column.modules.format.params === \"function\" ? cell.column.modules.format.params(component) : cell.column.modules.format.params;\r\n\r\n\t\tfunction onRendered(callback){\r\n\t\t\tif(!cell.modules.format){\r\n\t\t\t\tcell.modules.format = {};\r\n\t\t\t}\r\n\r\n\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\tcell.modules.format.rendered = false;\r\n\t\t}\r\n\r\n\t\treturn cell.column.modules.format.formatter.call(this, component, params, onRendered);\r\n\t}\r\n\r\n\tformatExportValue(cell, type){\r\n\t\tvar formatter = cell.column.modules.format[type],\r\n\t\tparams;\r\n\r\n\t\tif(formatter){\r\n\t\t\tparams = typeof formatter.params === \"function\" ? formatter.params(component) : formatter.params;\r\n\r\n\t\t\tfunction onRendered(callback){\r\n\t\t\t\tif(!cell.modules.format){\r\n\t\t\t\t\tcell.modules.format = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tcell.modules.format.renderedCallback = callback;\r\n\t\t\t\tcell.modules.format.rendered = false;\r\n\t\t\t}\r\n\r\n\t\t\treturn formatter.formatter.call(this, cell.getComponent(), params, onRendered);\r\n\r\n\t\t}else{\r\n\t\t\treturn this.formatValue(cell);\r\n\t\t}\r\n\t}\r\n\r\n\tsanitizeHTML(value){\r\n\t\tif(value){\r\n\t\t\tvar entityMap = {\r\n\t\t\t\t'&': '&',\r\n\t\t\t\t'<': '<',\r\n\t\t\t\t'>': '>',\r\n\t\t\t\t'\"': '"',\r\n\t\t\t\t\"'\": ''',\r\n\t\t\t\t'/': '/',\r\n\t\t\t\t'`': '`',\r\n\t\t\t\t'=': '='\r\n\t\t\t};\r\n\r\n\t\t\treturn String(value).replace(/[&<>\"'`=\\/]/g, function (s) {\r\n\t\t\t\treturn entityMap[s];\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\treturn value;\r\n\t\t}\r\n\t}\r\n\r\n\temptyToSpace(value){\r\n\t\treturn value === null || typeof value === \"undefined\" || value === \"\" ? \" \" : value;\r\n\t}\r\n\r\n\t//get formatter for cell\r\n\tgetFormatter(formatter){\r\n\t\tvar formatter;\r\n\r\n\t\tswitch(typeof formatter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Format.formatters[formatter]){\r\n\t\t\t\tformatter = Format.formatters[formatter]\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Formatter Error - No such formatter found: \", formatter);\r\n\t\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tformatter = formatter;\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tformatter = Format.formatters.plaintext;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn formatter;\r\n\t}\r\n}\r\n\r\nFormat.moduleName = \"format\";\r\n\r\n//load defaults\r\nFormat.formatters = defaultFormatters;\r\n\r\nexport default Format;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightPadding = 0;\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.active = false;\r\n\t\tthis.scrollEndTimer = false;\r\n\r\n\t\tthis.registerColumnOption(\"frozen\");\r\n\t}\r\n\r\n\t//reset initial state\r\n\treset(){\r\n\t\tthis.initializationMode = \"left\";\r\n\t\tthis.leftColumns = [];\r\n\t\tthis.rightColumns = [];\r\n\t\tthis.leftMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.rightMargin = 0;\r\n\t\tthis.active = false;\r\n\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = 0;\r\n\t\tthis.table.columnManager.element.style.paddingRight = 0;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-layout\", this.layoutCell.bind(this));\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"column-width\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"row-layout-after\", this.layoutRow.bind(this));\r\n\t\tthis.subscribe(\"table-layout\", this.layout.bind(this));\r\n\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHorizontal.bind(this));\r\n\t\tthis.subscribe(\"columns-loading\", this.reset.bind(this));\r\n\t\tthis.subscribe(\"table-redraw\", this.layout.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tthis.layoutElement(cell.element, cell.column)\r\n\t}\r\n\r\n\t//initialize specific column\r\n\tinitializeColumn(column){\r\n\t\tvar config = {margin:0, edge:false};\r\n\r\n\t\tif(!column.isGroup){\r\n\r\n\t\t\tif(this.frozenCheck(column)){\r\n\r\n\t\t\t\tconfig.position = this.initializationMode;\r\n\r\n\t\t\t\tif(this.initializationMode == \"left\"){\r\n\t\t\t\t\tthis.leftColumns.push(column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.rightColumns.unshift(column);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.active = true;\r\n\r\n\t\t\t\tcolumn.modules.frozen = config;\r\n\t\t\t}else{\r\n\t\t\t\tthis.initializationMode = \"right\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tfrozenCheck(column){\r\n\t\tvar frozen = false;\r\n\r\n\t\tif(column.parent.isGroup && column.definition.frozen){\r\n\t\t\tconsole.warn(\"Frozen Column Error - Parent column group must be frozen, not individual columns or sub column groups\");\r\n\t\t}\r\n\r\n\t\tif(column.parent.isGroup){\r\n\t\t\treturn this.frozenCheck(column.parent);\r\n\t\t}else{\r\n\t\t\treturn column.definition.frozen;\r\n\t\t}\r\n\r\n\t\treturn frozen;\r\n\t}\r\n\r\n\t//quick layout to smooth horizontal scrolling\r\n\tscrollHorizontal(){\r\n\t\tvar rows;\r\n\r\n\t\tif(this.active){\r\n\t\t\tclearTimeout(this.scrollEndTimer);\r\n\r\n\t\t\t//layout all rows after scroll is complete\r\n\t\t\tthis.scrollEndTimer = setTimeout(() => {\r\n\t\t\t\tthis.layout();\r\n\t\t\t}, 100);\r\n\r\n\t\t\trows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.layoutColumnPosition();\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\t//calculate margins for rows\r\n\tcalcMargins(){\r\n\t\tthis.leftMargin = this._calcSpace(this.leftColumns, this.leftColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.headersElement.style.marginLeft = this.leftMargin;\r\n\r\n\t\tthis.rightMargin = this._calcSpace(this.rightColumns, this.rightColumns.length) + \"px\";\r\n\t\tthis.table.columnManager.element.style.paddingRight = this.rightMargin;\r\n\r\n\t\t//calculate right frozen columns\r\n\t\tthis.rightPadding = this.table.rowManager.element.clientWidth + this.table.columnManager.scrollLeft;\r\n\t}\r\n\r\n\t//layout calculation rows\r\n\tlayoutCalcRows(){\r\n\t\tif(this.table.modExists(\"columnCalcs\")){\r\n\t\t\tif(this.table.modules.columnCalcs.topInitialized && this.table.modules.columnCalcs.topRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.topRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modules.columnCalcs.botInitialized && this.table.modules.columnCalcs.botRow){\r\n\t\t\t\tthis.layoutRow(this.table.modules.columnCalcs.botRow);\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.modExists(\"groupRows\")){\r\n\t\t\t\tthis.layoutGroupCalcs(this.table.modules.groupRows.getGroups())\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutGroupCalcs(groups){\r\n\t\tgroups.forEach((group) => {\r\n\t\t\tif(group.calcs.top){\r\n\t\t\t\tthis.layoutRow(group.calcs.top);\r\n\t\t\t}\r\n\r\n\t\t\tif(group.calcs.bottom){\r\n\t\t\t\tthis.layoutRow(group.calcs.bottom);\r\n\t\t\t}\r\n\r\n\t\t\tif(group.groupList && group.groupList.length){\r\n\t\t\t\tthis.layoutGroupCalcs(group.groupList && group.groupList);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//calculate column positions and layout headers\r\n\tlayoutColumnPosition(allCells){\r\n\r\n\t\tvar leftParents = [];\r\n\r\n\t\tthis.leftColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this._calcSpace(this.leftColumns, i) + this.table.columnManager.scrollLeft) + \"px\";\r\n\r\n\t\t\tif(i == this.leftColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tvar parentEl = this.getColGroupParentElement(column);\r\n\t\t\t\tif(!leftParents.includes(parentEl)){\r\n\t\t\t\t\tthis.layoutElement(parentEl, column);\r\n\t\t\t\t\tleftParents.push(parentEl);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\t\tparentEl.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column, i) => {\r\n\t\t\tcolumn.modules.frozen.margin = (this.rightPadding - this._calcSpace(this.rightColumns, i + 1)) + \"px\";\r\n\r\n\t\t\tif(i == this.rightColumns.length - 1){\r\n\t\t\t\tcolumn.modules.frozen.edge = true;\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.modules.frozen.edge = false;\r\n\t\t\t}\r\n\r\n\r\n\t\t\tif(column.parent.isGroup){\r\n\t\t\t\tthis.layoutElement(this.getColGroupParentElement(column), column);\r\n\t\t\t}else{\r\n\t\t\t\tthis.layoutElement(column.getElement(), column);\r\n\t\t\t}\r\n\r\n\t\t\tif(allCells){\r\n\t\t\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tgetColGroupParentElement(column){\r\n\t\treturn column.parent.isGroup ? this.getColGroupParentElement(column.parent) : column.getElement();\r\n\t}\r\n\r\n\t//layout columns appropropriatly\r\n\tlayout(){\r\n\t\tvar rightMargin = 0;\r\n\r\n\t\tif(this.active){\r\n\r\n\t\t\t//calculate row padding\r\n\t\t\tthis.calcMargins();\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\"){\r\n\t\t\t\t\tthis.layoutRow(row);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.layoutCalcRows();\r\n\r\n\t\t\t//calculate left columns\r\n\t\t\tthis.layoutColumnPosition(true);\r\n\r\n\t\t\tthis.table.rowManager.tableElement.style.marginRight = this.rightMargin;\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutRow(row){\r\n\t\tvar rowEl = row.getElement();\r\n\r\n\t\trowEl.style.paddingLeft = this.leftMargin;\r\n\r\n\t\tthis.leftColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.rightColumns.forEach((column) => {\r\n\t\t\tvar cell = row.getCell(column);\r\n\r\n\t\t\tif(cell){\r\n\t\t\t\tthis.layoutElement(cell.getElement(true), column);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tlayoutElement(element, column){\r\n\r\n\t\tif(column.modules.frozen){\r\n\t\t\telement.style.position = \"absolute\";\r\n\t\t\telement.style.left = column.modules.frozen.margin;\r\n\r\n\t\t\telement.classList.add(\"tabulator-frozen\");\r\n\r\n\t\t\tif(column.modules.frozen.edge){\r\n\t\t\t\telement.classList.add(\"tabulator-frozen-\" + column.modules.frozen.position);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_calcSpace(columns, index){\r\n\t\tvar width = 0;\r\n\r\n\t\tfor (let i = 0; i < index; i++){\r\n\t\t\tif(columns[i].visible){\r\n\t\t\t\twidth += columns[i].getWidth();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn width;\r\n\t}\r\n}\r\n\r\nFrozenColumns.moduleName = \"frozenColumns\";\r\n\r\nexport default FrozenColumns;","import Module from '../../core/Module.js';\r\n\r\nclass FrozenRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.topElement = document.createElement(\"div\");\r\n\t\tthis.rows = [];\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"freeze\", this.freezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"unfreeze\", this.unfreezeRow.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"isFrozen\", this.isRowFrozen.bind(this));\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.rows = [];\r\n\r\n\t\tthis.topElement.classList.add(\"tabulator-frozen-rows-holder\");\r\n\r\n\t\t// this.table.columnManager.element.append(this.topElement);\r\n\t\tthis.table.columnManager.getElement().insertBefore(this.topElement, this.table.columnManager.headersElement.nextSibling);\r\n\r\n\t\tthis.subscribe(\"row-deleting\", this.detachRow.bind(this));\r\n\t\tthis.subscribe(\"rows-visible\", this.visibleRows.bind(this));\r\n\r\n\t\tthis.registerDisplayHandler(this.getRows.bind(this), 10);\r\n\t}\r\n\r\n\tisRowFrozen(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\treturn index > -1;\r\n\t}\r\n\r\n\tisFrozen(){\r\n\t\treturn !!this.rows.length;\r\n\t}\r\n\r\n\tvisibleRows(viewable, rows){\r\n\t\tthis.rows.forEach((row) => {\r\n\t\t\trows.push(row);\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\r\n\t//filter frozen rows out of display data\r\n\tgetRows(rows){\r\n\t\tvar self = this,\r\n\t\tfrozen = [],\r\n\t\toutput = rows.slice(0);\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tvar index = output.indexOf(row);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\toutput.splice(index, 1);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tfreezeRow(row){\r\n\t\tif(!row.modules.frozen){\r\n\t\t\trow.modules.frozen = true;\r\n\t\t\tthis.topElement.appendChild(row.getElement());\r\n\t\t\trow.initialize();\r\n\t\t\trow.normalizeHeight();\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.rows.push(row);\r\n\r\n\t\t\tthis.refreshData(false, \"display\")\r\n\r\n\t\t\tthis.styleRows();\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already frozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tunfreezeRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(row.modules.frozen){\r\n\r\n\t\t\trow.modules.frozen = false;\r\n\r\n\t\t\tthis.detachRow(row);\r\n\r\n\t\t\tthis.table.rowManager.adjustTableSize();\r\n\r\n\t\t\tthis.refreshData(false, \"display\")\r\n\r\n\t\t\tif(this.rows.length){\r\n\t\t\t\tthis.styleRows();\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Freeze Error - Row is already unfrozen\");\r\n\t\t}\r\n\t}\r\n\r\n\tdetachRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\r\n\t\tif(index > -1){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(rowEl.parentNode){\r\n\t\t\t\trowEl.parentNode.removeChild(rowEl);\r\n\t\t\t}\r\n\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\t}\r\n\r\n\tstyleRows(row){\r\n\t\tthis.rows.forEach((row, i) => {\r\n\t\t\tthis.table.rowManager.styleRow(row, i);\r\n\t\t});\r\n\t}\r\n}\r\n\r\nFrozenRows.moduleName = \"frozenRows\";\r\n\r\nexport default FrozenRows;","//public group object\r\nclass GroupComponent {\r\n\tconstructor (group){\r\n\t\tthis._group = group;\r\n\t\tthis.type = \"GroupComponent\";\r\n\r\n\t\treturn new Proxy(this, {\r\n\t\t\tget: function(target, name, receiver) {\r\n\t\t\t\tif (typeof target[name] !== \"undefined\") {\r\n\t\t\t\t\treturn target[name];\r\n\t\t\t\t}else{\r\n\t\t\t\t\treturn target._group.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\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\r\n\t\tthis.visible = oldGroup ? oldGroup.visible : (typeof groupManager.startOpen[level] !== \"undefined\" ? groupManager.startOpen[level] : groupManager.startOpen[0]);\r\n\r\n\t\tthis.component = null;\r\n\r\n\t\tthis.createElements();\r\n\t\tthis.addBindings();\r\n\r\n\t\tthis.createValueGroups();\r\n\t}\r\n\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\r\n\t\tthis.element = false;\r\n\t\tthis.arrowElement = false;\r\n\t\tthis.elementContents = false;\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar arrow = document.createElement(\"div\");\r\n\t\tarrow.classList.add(\"tabulator-arrow\");\r\n\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\r\n\t\tthis.arrowElement = document.createElement(\"div\");\r\n\t\tthis.arrowElement.classList.add(\"tabulator-group-toggle\");\r\n\t\tthis.arrowElement.appendChild(arrow);\r\n\r\n\t\t//setup movable rows\r\n\t\tif(this.groupManager.table.options.movableRows !== false && this.groupManager.table.modExists(\"moveRow\")){\r\n\t\t\tthis.groupManager.table.modules.moveRow.initializeGroupHeader(this);\r\n\t\t}\r\n\t}\r\n\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\r\n\taddBindings(){\r\n\t\tvar toggleElement;\r\n\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\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\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\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\t_addRowToGroup(row){\r\n\r\n\t\tvar level = this.level + 1;\r\n\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\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\r\n\t\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t_addRow(row){\r\n\t\tthis.rows.push(row);\r\n\t\trow.modules.group = this;\r\n\t}\r\n\r\n\tinsertRow(row, to, after){\r\n\t\tvar data = this.conformRowData({});\r\n\r\n\t\trow.updateData(data);\r\n\r\n\t\tvar toIndex = this.rows.indexOf(to);\r\n\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\r\n\t\trow.modules.group = this;\r\n\r\n\t\tthis.generateGroupHeaderContents();\r\n\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\r\n\t\tthis.groupManager.updateGroupRows(true);\r\n\t}\r\n\r\n\tscrollHeader(left){\r\n\t\tthis.arrowElement.style.marginLeft = left;\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\tchild.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tgetRowIndex(row){}\r\n\r\n\t//update row data to match grouping contraints\r\n\tconformRowData(data){\r\n\t\tif(this.field){\r\n\t\t\tdata[this.field] = this.key;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Data Conforming Error - Cannot conform row data to match new group as groupBy is a function\");\r\n\t\t}\r\n\r\n\t\tif(this.parent){\r\n\t\t\tdata = this.parent.conformRowData(data);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tremoveRow(row){\r\n\t\tvar index = this.rows.indexOf(row);\r\n\t\tvar el = row.getElement();\r\n\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.rows.splice(index, 1);\r\n\t\t}\r\n\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\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}else{\r\n\r\n\t\t\tif(el.parentNode){\r\n\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t}\r\n\r\n\t\t\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\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\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\r\n\tgetHeadersAndRows(noCalc){\r\n\t\tvar output = [];\r\n\r\n\t\toutput.push(this);\r\n\r\n\t\tthis._visSet();\r\n\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\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\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\r\n\t\t\t\toutput = output.concat(this.rows);\r\n\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\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\r\n\t\t\t\tif(this.groupManager.table.modExists(\"columnCalcs\")){\r\n\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\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\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\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\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetData(visible, transform){\r\n\t\tvar output = [];\r\n\r\n\t\tthis._visSet();\r\n\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\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRowCount(){\r\n\t\tvar count = 0;\r\n\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\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\r\n\thide(){\r\n\t\tthis.visible = false;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.remove(\"tabulator-group-visible\");\r\n\r\n\t\t\tif(this.groupList.length){\r\n\t\t\t\tthis.groupList.forEach((group) => {\r\n\r\n\t\t\t\t\tvar rows = group.getHeadersAndRows();\r\n\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\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\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\r\n\t\t\tthis.groupManager.table.rowManager.checkClassicModeGroupHeaderWidth();\r\n\r\n\t\t}else{\r\n\t\t\tthis.groupManager.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), false);\r\n\t}\r\n\r\n\tshow(){\r\n\t\tthis.visible = true;\r\n\r\n\t\tif(this.groupManager.table.rowManager.getRenderMode() == \"classic\" && !this.groupManager.table.options.pagination){\r\n\r\n\t\t\tthis.element.classList.add(\"tabulator-group-visible\");\r\n\r\n\t\t\tvar prev = this.generateElement();\r\n\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\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\r\n\t\t\t}else{\r\n\t\t\t\tthis.rows.forEach((row) => {\r\n\t\t\t\t\tvar rowEl = row.getElement();\r\n\t\t\t\t\tprev.parentNode.insertBefore(rowEl, prev.nextSibling);\r\n\t\t\t\t\trow.initialize();\r\n\t\t\t\t\tprev = rowEl;\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis.groupManager.table.rowManager.setDisplayRows(this.groupManager.updateGroupRows(), this.groupManager.getDisplayIndex());\r\n\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\r\n\t\tthis.groupManager.table.externalEvents.dispatch(\"groupVisibilityChanged\", this.getComponent(), true);\r\n\t}\r\n\r\n\t_visSet(){\r\n\t\tvar data = [];\r\n\r\n\t\tif(typeof this.visible == \"function\"){\r\n\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\r\n\t\t\tthis.visible = this.visible(this.key, this.getRowCount(), data, this.getComponent());\r\n\t\t}\r\n\t}\r\n\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\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\r\n\t\treturn match;\r\n\t}\r\n\r\n\tgetSubGroups(component){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.groupList.forEach(function(child){\r\n\t\t\toutput.push(component ? child.getComponent() : child);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgetRows(compoment){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\toutput.push(compoment ? row.getComponent() : row);\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tgenerateGroupHeaderContents(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.rows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\tthis.elementContents = this.generator(this.key, this.getRowCount(), data, this.getComponent());\r\n\r\n\t\twhile(this.element.firstChild) this.element.removeChild(this.element.firstChild);\r\n\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\r\n\t\tthis.element.insertBefore(this.arrowElement, this.element.firstChild);\r\n\t}\r\n\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\r\n\t////////////// Standard Row Functions //////////////\r\n\r\n\tgetElement(){\r\n\t\treturn this.elementContents ? this.element : this.generateElement();\r\n\t}\r\n\r\n\tgenerateElement(){\r\n\t\tthis.addBindings = false;\r\n\r\n\t\tthis._visSet();\r\n\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\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\r\n\t\tthis.generateGroupHeaderContents();\r\n\r\n\t\t// this.addBindings();\r\n\r\n\t\treturn this.element;\r\n\t}\r\n\r\n\tdetachElement(){\r\n\t\tif (this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t}\r\n\t}\r\n\r\n\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\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\r\n\treinitialize(){\r\n\t\tthis.initialized = false;\r\n\t\tthis.height = 0;\r\n\r\n\t\tif(Helpers.elVisible(this.element)){\r\n\t\t\tthis.initialize(true);\r\n\t\t}\r\n\t}\r\n\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\r\n\t//return rows outer height\r\n\tgetHeight(){\r\n\t\treturn this.outerHeight;\r\n\t}\r\n\r\n\tgetGroup(){\r\n\t\treturn this;\r\n\t}\r\n\r\n\treinitializeHeight(){}\r\n\r\n\tcalcHeight(){}\r\n\r\n\tsetCellHeight(){}\r\n\r\n\tclearCellHeight(){}\r\n\r\n\tdeinitializeHeight(){}\r\n\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\r\n\t\treturn this.component;\r\n\t}\r\n}\r\n\r\nexport default Group;","import Module from '../../core/Module.js';\r\n\r\nimport GroupComponent from './GroupComponent.js';\r\nimport Group from './Group.js';\r\n\r\nclass GroupRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.groupIDLookups = false; //enable table grouping and set field to group by\r\n\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\tthis.groupList = []; //ordered list of groups\r\n\t\tthis.allowedValues = false;\r\n\t\tthis.groups = {}; //hold row groups\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\r\n\t\tthis.displayHandler = this.getRows.bind(this);\r\n\r\n\t\t//register table options\r\n\t\tthis.registerTableOption(\"groupBy\", false); //enable table grouping and set field to group by\r\n\t\tthis.registerTableOption(\"groupStartOpen\", true); //starting state of group\r\n\t\tthis.registerTableOption(\"groupValues\", false);\r\n\t\tthis.registerTableOption(\"groupUpdateOnCellEdit\", false);\r\n\t\tthis.registerTableOption(\"groupHeader\", false); //header generation function\r\n\t\tthis.registerTableOption(\"groupHeaderPrint\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderClipboard\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderHtmlOutput\", null);\r\n\t\tthis.registerTableOption(\"groupHeaderDownload\", null);\r\n\t\tthis.registerTableOption(\"groupToggleElement\", \"arrow\");\r\n\t\tthis.registerTableOption(\"groupClosedShowCalcs\", false);\r\n\r\n\t\t//register table functions\r\n\t\tthis.registerTableFunction(\"setGroupBy\", this.setGroupBy.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupValues\", this.setGroupValues.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupStartOpen\", this.setGroupStartOpen.bind(this));\r\n\t\tthis.registerTableFunction(\"setGroupHeader\", this.setGroupHeader.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroups\", this.userGetGroups.bind(this));\r\n\t\tthis.registerTableFunction(\"getGroupedData\", this.userGetGroupedData.bind(this));\r\n\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"getGroup\", this.rowGetGroup.bind(this));\r\n\t}\r\n\r\n\t//initialize group configuration\r\n\tinitialize(){\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\tif(this.table.options.groupUpdateOnCellEdit){\r\n\t\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-data-changed\", this.reassignRowToGroup.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-built\", this.configureGroupSetup.bind(this));\r\n\t\t\t\r\n\t\t\tthis.subscribe(\"row-deleting\", this.rowDeleting.bind(this));\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"scroll-horizontal\", this.scrollHeaders.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.wipe.bind(this));\r\n\t\t\tthis.subscribe(\"rows-added\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-moving\", this.rowMoving.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-index\", this.rowAddingIndex.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"rows-sample\", this.rowSample.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"render-virtual-fill\", this.virtualRenderFill.bind(this));\r\n\r\n\t\t\tthis.registerDisplayHandler(this.displayHandler, 20);\r\n\r\n\t\t\tthis.initialized = true;\r\n\t\t}\r\n\t}\r\n\r\n\tconfigureGroupSetup(){\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tvar groupBy = this.table.options.groupBy,\r\n\t\t\tstartOpen = this.table.options.groupStartOpen,\r\n\t\t\tgroupHeader = this.table.options.groupHeader;\r\n\r\n\t\t\tthis.allowedValues = this.table.options.groupValues;\r\n\r\n\t\t\tif(Array.isArray(groupBy) && Array.isArray(groupHeader) && groupBy.length > groupHeader.length){\r\n\t\t\t\tconsole.warn(\"Error creating group headers, groupHeader array is shorter than groupBy array\");\r\n\t\t\t}\r\n\r\n\t\t\tthis.headerGenerator = [function(){return \"\";}];\r\n\t\t\tthis.startOpen = [function(){return false;}]; //starting state of group\r\n\r\n\t\t\tthis.langBind(\"groups|item\", (langValue, lang) => {\r\n\t\t\t\tthis.headerGenerator[0] = (value, count, data) => { //header layout function\r\n\t\t\t\t\treturn (typeof value === \"undefined\" ? \"\" : value) + \"(\" + count + \" \" + ((count === 1) ? langValue : lang.groups.items) + \")\";\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tthis.groupIDLookups = [];\r\n\r\n\t\t\tif(Array.isArray(groupBy) || groupBy){\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"table\" && this.table.options.columnCalcs != \"both\"){\r\n\t\t\t\t\tthis.table.modules.columnCalcs.removeCalcs();\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.modExists(\"columnCalcs\") && this.table.options.columnCalcs != \"group\"){\r\n\r\n\t\t\t\t\tvar cols = this.table.columnManager.getRealColumns();\r\n\r\n\t\t\t\t\tcols.forEach((col) => {\r\n\t\t\t\t\t\tif(col.definition.topCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeTopRow();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tif(col.definition.bottomCalc){\r\n\t\t\t\t\t\t\tthis.table.modules.columnCalcs.initializeBottomRow();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(!Array.isArray(groupBy)){\r\n\t\t\t\tgroupBy = [groupBy];\r\n\t\t\t}\r\n\r\n\t\t\tgroupBy.forEach((group, i) => {\r\n\t\t\t\tvar lookupFunc, column;\r\n\r\n\t\t\t\tif(typeof group == \"function\"){\r\n\t\t\t\t\tlookupFunc = group;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tcolumn = this.table.columnManager.getColumnByField(group);\r\n\r\n\t\t\t\t\tif(column){\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn column.getFieldValue(data);\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tlookupFunc = function(data){\r\n\t\t\t\t\t\t\treturn data[group];\r\n\t\t\t\t\t\t};\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.groupIDLookups.push({\r\n\t\t\t\t\tfield: typeof group === \"function\" ? false : group,\r\n\t\t\t\t\tfunc:lookupFunc,\r\n\t\t\t\t\tvalues:this.allowedValues ? this.allowedValues[i] : false,\r\n\t\t\t\t});\r\n\t\t\t});\r\n\r\n\t\t\tif(startOpen){\r\n\t\t\t\tif(!Array.isArray(startOpen)){\r\n\t\t\t\t\tstartOpen = [startOpen];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstartOpen.forEach((level) => {\r\n\t\t\t\t\tlevel = typeof level == \"function\" ? level : function(){return true;};\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.startOpen = startOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(groupHeader){\r\n\t\t\t\tthis.headerGenerator = Array.isArray(groupHeader) ? groupHeader : [groupHeader];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowSample(rows, prevValue){\r\n\t\tvar group = this.getGroups(false)[0];\r\n\r\n\t\tprevValue.push(group.getRows(false)[0]);\r\n\r\n\t\treturn prevValue;\r\n\t}\r\n\r\n\tvirtualRenderFill(){\r\n\t\tvar el = this.table.rowManager.tableElement;\r\n\t\tvar rows = this.table.rowManager.getVisibleRows();\r\n\r\n\t\trows = rows.filter((row) => {\r\n\t\t\treturn row.type !== \"group\";\r\n\t\t});\r\n\r\n\t\tel.style.minWidth = !rows.length ? this.table.columnManager.getWidth() + \"px\" : \"\";\r\n\r\n\t\t// if(this.table.options.groupBy){\r\n\t\t// \tif(this.layoutMode() != \"fitDataFill\" && rowsCount == this.table.modules.groupRows.countGroups()){\r\n\t\t// \t\tel.style.minWidth = this.table.columnManager.getWidth() + \"px\";\r\n\t\t// \t}\r\n\t\t// }\r\n\t}\r\n\r\n\trowAddingIndex(row, index, top){\r\n\t\tthis.assignRowToGroup(row);\r\n\r\n\t\tvar groupRows = row.modules.group.rows;\r\n\r\n\t\tif(groupRows.length > 1){\r\n\t\t\tif(!index || (index && groupRows.indexOf(index) == -1)){\r\n\t\t\t\tif(top){\r\n\t\t\t\t\tif(groupRows[0] !== row){\r\n\t\t\t\t\t\tindex = groupRows[0];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(groupRows[groupRows.length -1] !== row){\r\n\t\t\t\t\t\tindex = groupRows[groupRows.length -1];\r\n\t\t\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.moveRowInArray(row.modules.group.rows, row, index, !top);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn index;\r\n\t}\r\n\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"group-changed\");\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tsetGroupBy(groups){\r\n\t\tthis.table.options.groupBy = groups;\r\n\t\tif(!this.initialized){\r\n\t\t\tthis.initialize();\r\n\t\t}else{\r\n\t\t\tthis.configureGroupSetup();\r\n\t\t}\r\n\r\n\t\tthis.refreshData();\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupValues(groupValues){\r\n\t\tthis.table.options.groupValues = groupValues;\r\n\t\tthis.configureGroupSetup();\r\n\t\tthis.refreshData();\r\n\r\n\t\tthis.trackChanges();\r\n\t}\r\n\r\n\tsetGroupStartOpen(values){\r\n\t\tthis.table.options.groupStartOpen = values;\r\n\t\tthis.configureGroupSetup();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tsetGroupHeader(values){\r\n\t\tthis.table.options.groupHeader = values;\r\n\t\tthis.configureGroupSetup();\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\t\t\tthis.refreshData();\r\n\r\n\t\t\tthis.trackChanges();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Grouping Update - cant refresh view, no groups have been set\");\r\n\t\t}\r\n\t}\r\n\r\n\tuserGetGroups(values){\r\n\t\treturn this.getGroups(true);\r\n\t}\r\n\r\n\t// get grouped table data in the same format as getData()\r\n\tuserGetGroupedData(){\r\n\t\treturn this.table.options.groupBy ?\r\n\t\tthis.getGroupedData() : this.getData()\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////////\r\n\t///////// Component Functions /////////\r\n\t///////////////////////////////////////\r\n\r\n\trowGetGroup(row){\r\n\t\treturn row.modules.group ? row.modules.group.getComponent() : false;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\trowMoving(from, to, after){\r\n\t\tif(!after && to instanceof Group){\r\n\t\t\tto = this.table.rowManager.prevDisplayRow(from) || to;\r\n\t\t}\r\n\r\n\t\tvar toGroup = to instanceof Group ? to : to.modules.group;\r\n\t\tvar fromGroup = from instanceof Group ? from : from.modules.group;\r\n\r\n\t\tif(toGroup === fromGroup){\r\n\t\t\tthis.table.rowManager.moveRowInArray(toGroup.rows, from, to, after);\r\n\t\t}else{\r\n\t\t\tif(fromGroup){\r\n\t\t\t\tfromGroup.removeRow(from);\r\n\t\t\t}\r\n\r\n\t\t\ttoGroup.insertRow(from, to, after);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowDeleting(row){\r\n\t\t//remove from group\r\n\t\tif(row.modules.group){\r\n\t\t\trow.modules.group.removeRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\trowsUpdated(row){\r\n\t\tthis.updateGroupRows(true);\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.reassignRowToGroup(cell.row);\r\n\t}\r\n\r\n\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\r\n\t//return appropriate rows with group headers\r\n\tgetRows(rows){\r\n\t\tif(this.table.options.groupBy && this.groupIDLookups.length){\r\n\r\n\t\t\tthis.dispatchExternal(\"dataGrouping\");\r\n\r\n\t\t\tthis.generateGroups(rows);\r\n\r\n\t\t\tif(this.subscribedExternal(\"dataGrouped\")){\r\n\t\t\t\tthis.dispatchExternal(\"dataGrouped\", this.getGroups(true));\r\n\t\t\t}\r\n\r\n\t\t\treturn this.updateGroupRows();\r\n\r\n\t\t}else{\r\n\t\t\treturn rows.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\tgetGroups(component){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroupComponents.push(component ? group.getComponent() : group);\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\tgetChildGroups(group){\r\n\t\tvar groupComponents = [];\r\n\r\n\t\tif(!group){\r\n\t\t\tgroup = this;\r\n\t\t}\r\n\r\n\t\tgroup.groupList.forEach((child) => {\r\n\t\t\tif(child.groupList.length){\r\n\t\t\t\tgroupComponents = groupComponents.concat(this.getChildGroups(child));\r\n\t\t\t}else{\r\n\t\t\t\tgroupComponents.push(child);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupComponents;\r\n\t}\r\n\r\n\twipe(){\r\n\t\tthis.groupList.forEach(function(group){\r\n\t\t\tgroup.wipe();\r\n\t\t});\r\n\t}\r\n\r\n\tpullGroupListData(groupList) {\r\n\t\tvar groupListData = [];\r\n\r\n\t\tgroupList.forEach((group) => {\r\n\t\t\tvar groupHeader = {};\r\n\t\t\tgroupHeader.level = 0;\r\n\t\t\tgroupHeader.rowCount = 0;\r\n\t\t\tgroupHeader.headerContent = \"\";\r\n\t\t\tvar childData = [];\r\n\r\n\t\t\tif (group.hasSubGroups) {\r\n\t\t\t\tchildData = this.pullGroupListData(group.groupList);\r\n\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.rowCount = childData.length - group.groupList.length; // data length minus number of sub-headers\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, groupHeader.rowCount, group.rows, group);\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\t\t\t\tgroupListData = groupListData.concat(childData);\r\n\t\t\t}\r\n\r\n\t\t\telse {\r\n\t\t\t\tgroupHeader.level = group.level;\r\n\t\t\t\tgroupHeader.headerContent = group.generator(group.key, group.rows.length, group.rows, group);\r\n\t\t\t\tgroupHeader.rowCount = group.getRows().length;\r\n\r\n\t\t\t\tgroupListData.push(groupHeader);\r\n\r\n\t\t\t\tgroup.getRows().forEach((row) => {\r\n\t\t\t\t\tgroupListData.push(row.getData(\"data\"));\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn groupListData\r\n\t}\r\n\r\n\tgetGroupedData(){\r\n\r\n\t\treturn this.pullGroupListData(this.groupList);\r\n\t}\r\n\r\n\tgetRowGroup(row){\r\n\t\tvar match = false;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tvar result = group.getRowGroup(row);\r\n\r\n\t\t\tif(result){\r\n\t\t\t\tmatch = result;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn match;\r\n\t}\r\n\r\n\tcountGroups(){\r\n\t\treturn this.groupList.length;\r\n\t}\r\n\r\n\tgenerateGroups(rows){\r\n\t\tvar oldGroups = this.groups;\r\n\r\n\t\tthis.groups = {};\r\n\t\tthis.groupList = [];\r\n\r\n\t\tif(this.allowedValues && this.allowedValues[0]){\r\n\t\t\tthis.allowedValues[0].forEach((value) => {\r\n\t\t\t\tthis.createGroup(value, 0, oldGroups);\r\n\t\t\t});\r\n\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToExistingGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\trows.forEach((row) => {\r\n\t\t\t\tthis.assignRowToGroup(row, oldGroups);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tcreateGroup(groupID, level, oldGroups){\r\n\t\tvar groupKey = level + \"_\" + groupID,\r\n\t\tgroup;\r\n\r\n\t\toldGroups = oldGroups || [];\r\n\r\n\t\tgroup = new Group(this, false, level, groupID, this.groupIDLookups[0].field, this.headerGenerator[0], oldGroups[groupKey]);\r\n\r\n\t\tthis.groups[groupKey] = group;\r\n\t\tthis.groupList.push(group);\r\n\t}\r\n\r\n\tassignRowToExistingGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tgroupKey = \"0_\" + groupID;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tthis.groups[groupKey].addRow(row);\r\n\t\t}\r\n\t}\r\n\r\n\tassignRowToGroup(row, oldGroups){\r\n\t\tvar groupID = this.groupIDLookups[0].func(row.getData()),\r\n\t\tnewGroupNeeded = !this.groups[\"0_\" + groupID];\r\n\r\n\t\tif(newGroupNeeded){\r\n\t\t\tthis.createGroup(groupID, 0, oldGroups);\r\n\t\t}\r\n\r\n\t\tthis.groups[\"0_\" + groupID].addRow(row);\r\n\r\n\t\treturn !newGroupNeeded;\r\n\t}\r\n\r\n\treassignRowToGroup(row){\r\n\t\tif(row.type === \"row\"){\r\n\t\t\tvar oldRowGroup = row.modules.group,\r\n\t\t\toldGroupPath = oldRowGroup.getPath(),\r\n\t\t\tnewGroupPath = this.getExpectedPath(row),\r\n\t\t\tsamePath = true;\r\n\r\n\t\t\t// figure out if new group path is the same as old group path\r\n\t\t\tvar samePath = (oldGroupPath.length == newGroupPath.length) && oldGroupPath.every((element, index) => {\r\n\t\t\t\treturn element === newGroupPath[index];\r\n\t\t\t});\r\n\r\n\t\t\t// refresh if they new path and old path aren't the same (aka the row's groupings have changed)\r\n\t\t\tif(!samePath) {\r\n\t\t\t\toldRowGroup.removeRow(row);\r\n\t\t\t\tthis.assignRowToGroup(row, this.groups);\r\n\t\t\t\tthis.refreshData(true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tgetExpectedPath(row) {\r\n\t\tvar groupPath = [], rowData = row.getData();\r\n\r\n\t\tthis.groupIDLookups.forEach((groupId) => {\r\n\t\t\tgroupPath.push(groupId.func(rowData));\r\n\t\t});\r\n\r\n\t\treturn groupPath;\r\n\t}\r\n\r\n\tupdateGroupRows(force){\r\n\t\tvar output = [],\r\n\t\toldRowCount;\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\toutput = output.concat(group.getHeadersAndRows());\r\n\t\t});\r\n\r\n\t\tif(force){\r\n\t\t\tthis.refreshData(true, this.displayHandler);\r\n\t\t}\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tscrollHeaders(left){\r\n\t\tif(this.table.options.renderHorizontal === \"virtual\"){\r\n\t\t\tleft -= this.table.columnManager.renderer.vDomPadLeft;\r\n\t\t}\r\n\r\n\t\tleft = left + \"px\";\r\n\r\n\t\tthis.groupList.forEach((group) => {\r\n\t\t\tgroup.scrollHeader(left);\r\n\t\t});\r\n\t}\r\n\r\n\tremoveGroup(group){\r\n\t\tvar groupKey = group.level + \"_\" + group.key,\r\n\t\tindex;\r\n\r\n\t\tif(this.groups[groupKey]){\r\n\t\t\tdelete this.groups[groupKey];\r\n\r\n\t\t\tindex = this.groupList.indexOf(group);\r\n\r\n\t\t\tif(index > -1){\r\n\t\t\t\tthis.groupList.splice(index, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nGroupRows.moduleName = \"groupRows\";\r\n\r\nexport default GroupRows;","import Module from '../../core/Module.js';\r\nimport Row from '../../core/row/Row.js';\r\nimport Cell from '../../core/cell/Cell.js';\r\n\r\nimport defaultUndoers from './defaults/undoers.js';\r\nimport defaultRedoers from './defaults/redoers.js';\r\n\r\nclass History extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\r\n\t\tthis.registerTableOption(\"history\", false); //enable edit history\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.history){\r\n\t\t\tthis.subscribe(\"cell-value-updated\", this.cellUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"cell-delete\", this.clearComponentHistory.bind(this));\r\n\t\t\tthis.subscribe(\"row-delete\", this.rowDeleted.bind(this));\r\n\t\t\tthis.subscribe(\"rows-wipe\", this.clear.bind(this));\r\n\t\t\tthis.subscribe(\"row-added\", this.rowAdded.bind(this));\r\n\t\t\tthis.subscribe(\"row-move\", this.rowMoved.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"undo\", this.undo.bind(this));\r\n\t\tthis.registerTableFunction(\"redo\", this.redo.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryUndoSize\", this.getHistoryUndoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getHistoryRedoSize\", this.getHistoryRedoSize.bind(this));\r\n\t\tthis.registerTableFunction(\"clearHistory\", this.clear.bind(this));\r\n\t}\r\n\r\n\trowMoved(from, to, after){\r\n\t\tthis.action(\"rowMove\", from, {posFrom:this.table.rowManager.getRowPosition(from), posTo:this.table.rowManager.getRowPosition(to), to:to, after:after});\r\n\t}\r\n\r\n\trowAdded(row, data, pos, index){\r\n\t\tthis.action(\"rowAdd\", row, {data:data, pos:pos, index:index});\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tvar index, rows;\r\n\r\n\t\tif(this.table.options.groupBy){\r\n\r\n\t\t\trows = row.getComponent().getGroup().rows\r\n\t\t\tindex = rows.indexOf(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = rows[index-1];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tindex = row.table.rowManager.getRowIndex(row);\r\n\r\n\t\t\tif(index){\r\n\t\t\t\tindex = row.table.rowManager.rows[index-1];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.action(\"rowDelete\", row, {data:row.getData(), pos:!index, index:index});\r\n\t}\r\n\r\n\tcellUpdated(cell){\r\n\t\tthis.action(\"cellEdit\", cell, {oldValue:cell.oldValue, newValue:cell.value});\r\n\t}\r\n\r\n\tclear(){\r\n\t\tthis.history = [];\r\n\t\tthis.index = -1;\r\n\t}\r\n\r\n\taction(type, component, data){\r\n\t\tthis.history = this.history.slice(0, this.index + 1);\r\n\r\n\t\tthis.history.push({\r\n\t\t\ttype:type,\r\n\t\t\tcomponent:component,\r\n\t\t\tdata:data,\r\n\t\t});\r\n\r\n\t\tthis.index ++;\r\n\t}\r\n\r\n\tgetHistoryUndoSize(){\r\n\t\treturn this.index + 1;\r\n\t}\r\n\r\n\tgetHistoryRedoSize(){\r\n\t\treturn this.history.length - (this.index + 1);\r\n\t}\r\n\r\n\tclearComponentHistory(component){\r\n\t\tvar index = this.history.findIndex(function(item){\r\n\t\t\treturn item.component === component;\r\n\t\t});\r\n\r\n\t\tif(index > -1){\r\n\t\t\tthis.history.splice(index, 1);\r\n\t\t\tif(index <= this.index){\r\n\t\t\t\tthis.index--;\r\n\t\t\t}\r\n\r\n\t\t\tthis.clearComponentHistory(component);\r\n\t\t}\r\n\t}\r\n\r\n\tundo(){\r\n\t\tif(this.index > -1){\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.undoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.index--;\r\n\r\n\t\t\tthis.dispatchExternal(\"historyUndo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Undo Error - No more history to undo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\tredo(){\r\n\t\tif(this.history.length-1 > this.index){\r\n\r\n\t\t\tthis.index++;\r\n\r\n\t\t\tlet action = this.history[this.index];\r\n\r\n\t\t\tHistory.redoers[action.type].call(this, action);\r\n\r\n\t\t\tthis.dispatchExternal(\"historyRedo\", action.type, action.component.getComponent(), action.data);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"History Redo Error - No more history to redo\");\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//rebind rows to new element after deletion\r\n\t_rebindRow(oldRow, newRow){\r\n\t\tthis.history.forEach(function(action){\r\n\t\t\tif(action.component instanceof Row){\r\n\t\t\t\tif(action.component === oldRow){\r\n\t\t\t\t\taction.component = newRow;\r\n\t\t\t\t}\r\n\t\t\t}else if(action.component instanceof Cell){\r\n\t\t\t\tif(action.component.row === oldRow){\r\n\t\t\t\t\tvar field = action.component.column.getField();\r\n\r\n\t\t\t\t\tif(field){\r\n\t\t\t\t\t\taction.component = newRow.getCell(field);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n}\r\n\r\nHistory.moduleName = \"history\";\r\n\r\n//load defaults\r\nHistory.undoers = defaultUndoers;\r\nHistory.redoers = defaultRedoers;\r\n\r\nexport default History;","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.oldValue);\r\n\t\taction.component.cellRendered();\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowDelete: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posFrom], !action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","export default {\r\n\tcellEdit: function(action){\r\n\t\taction.component.setValueProcessData(action.data.newValue);\r\n\t\taction.component.cellRendered();\r\n\t},\r\n\r\n\trowAdd: function(action){\r\n\t\tvar newRow = this.table.rowManager.addRowActual(action.data.data, action.data.pos, action.data.index);\r\n\r\n\t\tif(this.table.options.groupBy && this.table.modExists(\"groupRows\")){\r\n\t\t\tthis.table.modules.groupRows.updateGroupRows(true);\r\n\t\t}\r\n\r\n\t\tthis._rebindRow(action.component, newRow);\r\n\t},\r\n\r\n\trowDelete:function(action){\r\n\t\taction.component.deleteActual();\r\n\t},\r\n\r\n\trowMove: function(action){\r\n\t\tthis.table.rowManager.moveRowActual(action.component, this.table.rowManager.rows[action.data.posTo], action.data.after);\r\n\t\tthis.table.rowManager.redraw();\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Column from '../../core/column/Column.js';\r\n\r\nclass HtmlTableImport extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.fieldIndex = [];\r\n\t\tthis.hasIndex = false;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.tableElementCheck();\r\n\t}\r\n\r\n\ttableElementCheck(){\r\n\t\tif(this.table.originalElement && this.table.originalElement.tagName === \"TABLE\"){\r\n\t\t\tthis.parseTable();\r\n\t\t}\r\n\t}\r\n\r\n\tparseTable(){\r\n\t\tvar element = this.table.originalElement,\r\n\t\toptions = this.table.options,\r\n\t\tcolumns = options.columns,\r\n\t\theaders = element.getElementsByTagName(\"th\"),\r\n\t\trows = element.getElementsByTagName(\"tbody\")[0],\r\n\t\tdata = [],\r\n\t\tnewTable;\r\n\r\n\t\tthis.hasIndex = false;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImporting\");\r\n\r\n\t\trows = rows ? rows.getElementsByTagName(\"tr\") : [];\r\n\r\n\t\t//check for Tabulator inline options\r\n\t\tthis._extractOptions(element, options);\r\n\r\n\t\tif(headers.length){\r\n\t\t\tthis._extractHeaders(headers, rows);\r\n\t\t}else{\r\n\t\t\tthis._generateBlankHeaders(headers, rows);\r\n\t\t}\r\n\r\n\t\t//iterate through table rows and build data set\r\n\t\tfor(var index = 0; index < rows.length; index++){\r\n\t\t\tvar row = rows[index],\r\n\t\t\tcells = row.getElementsByTagName(\"td\"),\r\n\t\t\titem = {};\r\n\r\n\t\t\t//create index if the dont exist in table\r\n\t\t\tif(!this.hasIndex){\r\n\t\t\t\titem[options.index] = index;\r\n\t\t\t}\r\n\r\n\t\t\tfor(var i = 0; i < cells.length; i++){\r\n\t\t\t\tvar cell = cells[i];\r\n\t\t\t\tif(typeof this.fieldIndex[i] !== \"undefined\"){\r\n\t\t\t\t\titem[this.fieldIndex[i]] = cell.innerHTML;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//add row data to item\r\n\t\t\tdata.push(item);\r\n\t\t}\r\n\r\n\t\toptions.data = data;\r\n\r\n\t\tthis.dispatchExternal(\"htmlImported\");\r\n\t}\r\n\r\n\t//extract tabulator attribute options\r\n\t_extractOptions(element, options, defaultOptions){\r\n\t\tvar attributes = element.attributes;\r\n\t\tvar optionsArr = defaultOptions ? Object.keys(defaultOptions) : Object.keys(options);\r\n\t\tvar optionsList = {};\r\n\r\n\t\toptionsArr.forEach((item) => {\r\n\t\t\toptionsList[item.toLowerCase()] = item;\r\n\t\t});\r\n\r\n\t\tfor(var index in attributes){\r\n\t\t\tvar attrib = attributes[index];\r\n\t\t\tvar name;\r\n\r\n\t\t\tif(attrib && typeof attrib == \"object\" && attrib.name && attrib.name.indexOf(\"tabulator-\") === 0){\r\n\t\t\t\tname = attrib.name.replace(\"tabulator-\", \"\");\r\n\r\n\t\t\t\tif(typeof optionsList[name] !== \"undefined\"){\r\n\t\t\t\t\toptions[optionsList[name]] = this._attribValue(attrib.value);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//get value of attribute\r\n\t_attribValue(value){\r\n\t\tif(value === \"true\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tif(value === \"false\"){\r\n\t\t\treturn false;\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\t//find column if it has already been defined\r\n\t_findCol(title){\r\n\t\tvar match = this.table.options.columns.find((column) => {\r\n\t\t\treturn column.title === title;\r\n\t\t});\r\n\r\n\t\treturn match || false;\r\n\t}\r\n\r\n\t//extract column from headers\r\n\t_extractHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\texists = false,\r\n\t\t\tcol = this._findCol(header.textContent),\r\n\t\t\twidth, attributes;\r\n\r\n\t\t\tif(col){\r\n\t\t\t\texists = true;\r\n\t\t\t}else{\r\n\t\t\t\tcol = {title:header.textContent.trim()};\r\n\t\t\t}\r\n\r\n\t\t\tif(!col.field) {\r\n\t\t\t\tcol.field = header.textContent.trim().toLowerCase().replace(\" \", \"_\");\r\n\t\t\t}\r\n\r\n\t\t\twidth = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width && !col.width)\t{\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\t//check for Tabulator inline options\r\n\t\t\tthis._extractOptions(header, col, this.table.columnManager.optionsList.registeredDefaults);\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tif(col.field == this.table.options.index){\r\n\t\t\t\tthis.hasIndex = true;\r\n\t\t\t}\r\n\r\n\t\t\tif(!exists){\r\n\t\t\t\tthis.table.options.columns.push(col);\r\n\t\t\t}\r\n\r\n\t\t}\r\n\t}\r\n\r\n\t//generate blank headers\r\n\t_generateBlankHeaders(headers, rows){\r\n\t\tfor(var index = 0; index < headers.length; index++){\r\n\t\t\tvar header = headers[index],\r\n\t\t\tcol = {title:\"\", field:\"col\" + index};\r\n\r\n\t\t\tthis.fieldIndex[index] = col.field;\r\n\r\n\t\t\tvar width = header.getAttribute(\"width\");\r\n\r\n\t\t\tif(width){\r\n\t\t\t\tcol.width = width;\r\n\t\t\t}\r\n\r\n\t\t\tthis.table.options.columns.push(col);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nHtmlTableImport.moduleName = \"htmlTableImport\";\r\n\r\nexport default HtmlTableImport;","import csv from './importers/csv.js';\r\nimport json from './importers/json.js';\r\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\r\n};","function csvImporter(input){\r\n var data = [],\r\n row = 0, \r\n col = 0,\r\n inQuote = false;\r\n \r\n //Iterate over each character\r\n for (let index = 0; index < input.length; index++) {\r\n let char = input[index], \r\n nextChar = input[index+1]; \r\n \r\n //Initialize empty row\r\n if(!data[row]){\r\n data[row] = [];\r\n }\r\n\r\n //Initialize empty column\r\n if(!data[row][col]){\r\n data[row][col] = \"\";\r\n }\r\n \r\n //Handle quotation mark inside string\r\n if (char == '\"' && inQuote && nextChar == '\"') { \r\n data[row][col] += char; \r\n index++;\r\n continue; \r\n }\r\n \r\n //Begin / End Quote\r\n if (char == '\"') { \r\n inQuote = !inQuote;\r\n continue;\r\n }\r\n \r\n //Next column (if not in quote)\r\n if (char == ',' && !inQuote) { \r\n col++;\r\n continue; \r\n }\r\n \r\n //New row if new line and not in quote (CRLF) \r\n if (char == '\\r' && nextChar == '\\n' && !inQuote) { \r\n col = 0; \r\n row++; \r\n index++; \r\n continue; \r\n }\r\n \r\n //New row if new line and not in quote (CR or LF) \r\n if ((char == '\\r' || char == '\\n') && !inQuote) { \r\n col = 0;\r\n row++;\r\n continue; \r\n }\r\n\r\n //Normal Character, append to column\r\n data[row][col] += char;\r\n }\r\n\r\n return data;\r\n}\r\n\r\nexport default csvImporter;","export default function(input){\r\n try {\r\n return JSON.parse(input);\r\n } catch(e) {\r\n console.warn(\"JSON Import Error - File contents is invalid JSON\", e);\r\n return Promise.reject();\r\n }\r\n}","import Module from '../../core/Module.js';\r\n\r\nimport defaultImporters from './defaults/importers.js';\r\n\r\nclass Import extends Module{\r\n \r\n constructor(table){\r\n super(table);\r\n \r\n this.registerTableOption(\"importFormat\");\r\n this.registerTableOption(\"importReader\", \"text\");\r\n }\r\n \r\n initialize(){\r\n this.registerTableFunction(\"import\", this.importFromFile.bind(this));\r\n\r\n if(this.table.options.importFormat){\r\n this.subscribe(\"data-loading\", this.loadDataCheck.bind(this), 10);\r\n this.subscribe(\"data-load\", this.loadData.bind(this), 10);\r\n }\r\n }\r\n\r\n loadDataCheck(data){\r\n return typeof data === \"string\";\r\n }\r\n\r\n loadData(data, params, config, silent, previousData){\r\n return this.importData(this.lookupImporter(), data)\r\n .then(this.structureData.bind(this))\r\n .catch((err) => {\r\n console.error(\"Import Error:\", err || \"Unable to import data\")\r\n return Promise.reject(err);\r\n })\r\n }\r\n\r\n lookupImporter(importFormat){\r\n var importer;\r\n \r\n if(!importFormat){\r\n importFormat = this.table.options.importFormat;\r\n }\r\n \r\n if(typeof importFormat === \"string\"){\r\n importer = Import.importers[importFormat];\r\n }else{\r\n importer = importFormat;\r\n }\r\n\r\n if(!importer){\r\n console.error(\"Import Error - Importer not found:\", importFormat);\r\n }\r\n \r\n return importer;\r\n }\r\n \r\n importFromFile(importFormat, extension){\r\n var importer = this.lookupImporter(importFormat);\r\n \r\n if(importer){\r\n return this.pickFile(extension)\r\n .then(this.importData.bind(this, importer))\r\n .then(this.structureData.bind(this))\r\n .then(this.setData.bind(this))\r\n .catch((err) => {\r\n console.error(\"Import Error:\", err || \"Unable to import file\")\r\n return Promise.reject(err);\r\n })\r\n }\r\n }\r\n \r\n pickFile(extensions){\r\n return new Promise((resolve, reject) => {\r\n var input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.accept = extensions;\r\n \r\n input.addEventListener(\"change\", (e) => {\r\n var file = input.files[0],\r\n reader = new FileReader(),\r\n data;\r\n \r\n switch(this.table.options.importReader){\r\n case \"buffer\":\r\n reader.readAsArrayBuffer(file);\r\n break;\r\n\r\n case \"binary\":\r\n reader.readAsBinaryString(file);\r\n break;\r\n\r\n case \"url\":\r\n reader.readAsDataURL(file);\r\n break;\r\n\r\n case \"text\":\r\n default:\r\n reader.readAsText(file);\r\n }\r\n \r\n reader.onload = (e) => {\r\n resolve(reader.result)\r\n };\r\n \r\n reader.onerror = (e) => {\r\n console.warn(\"File Load Error - Unable to read file\");\r\n reject();\r\n };\r\n });\r\n \r\n input.click();\r\n });\r\n }\r\n \r\n importData(importer, fileContents){\r\n var data = importer.call(this.table, fileContents);\r\n \r\n if(data instanceof Promise){\r\n return data;\r\n }else{\r\n return data ? Promise.resolve(data) : Promise.reject();\r\n }\r\n }\r\n\r\n structureData(parsedData){\r\n var data = [];\r\n\r\n console.log(\"structure\", parsedData)\r\n\r\n if(Array.isArray(parsedData) && parsedData.length && Array.isArray(parsedData[0])){\r\n if(this.table.options.autoColumns){\r\n data = this.structureArrayToObject(parsedData);\r\n }else{\r\n data = this.structureArrayToColumns(parsedData);\r\n }\r\n\r\n return data;\r\n }else{\r\n return parsedData;\r\n }\r\n }\r\n\r\n structureArrayToObject(parsedData){\r\n var columns = parsedData.shift();\r\n\r\n var data = parsedData.map((values) => {\r\n var row = {};\r\n\r\n columns.forEach((key, i) => {\r\n row[key] = values[i];\r\n })\r\n\r\n return row;\r\n })\r\n\r\n return data;\r\n }\r\n\r\n structureArrayToColumns(parsedData){\r\n var data = [],\r\n columns = this.table.getColumns();\r\n\r\n //remove first row if it is the column names\r\n if(columns[0] && parsedData[0][0]){\r\n if(columns[0].getDefinition().title === parsedData[0][0]){\r\n parsedData.shift();\r\n }\r\n }\r\n \r\n //convert row arrays to objects\r\n parsedData.forEach((rowData) => {\r\n var row = {};\r\n\r\n rowData.forEach((value, index) => {\r\n var column = columns[index];\r\n\r\n if(column){\r\n row[column.getField()] = value;\r\n }\r\n })\r\n\r\n data.push(row);\r\n });\r\n\r\n return data;\r\n }\r\n \r\n setData(data){\r\n return this.table.setData(data);\r\n }\r\n}\r\n\r\nImport.moduleName = \"import\";\r\n\r\n//load defaults\r\nImport.importers = defaultImporters;\r\n\r\nexport default Import;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nimport Cell from '../../core/cell/Cell';\r\nimport Column from '../../core/column/Column';\r\n\r\nclass Interaction extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.eventMap = {\r\n\t\t\t//row events\r\n\t\t\trowClick:\"row-click\",\r\n\t\t\trowDblClick:\"row-dblclick\",\r\n\t\t\trowContext:\"row-contextmenu\",\r\n\t\t\trowMouseEnter:\"row-mouseenter\",\r\n\t\t\trowMouseLeave:\"row-mouseleave\",\r\n\t\t\trowMouseOver:\"row-mouseover\",\r\n\t\t\trowMouseOut:\"row-mouseout\",\r\n\t\t\trowMouseMove:\"row-mousemove\",\r\n\t\t\trowTap:\"row\",\r\n\t\t\trowDblTap:\"row\",\r\n\t\t\trowTapHold:\"row\",\r\n\r\n\t\t\t//cell events\r\n\t\t\tcellClick:\"cell-click\",\r\n\t\t\tcellDblClick:\"cell-dblclick\",\r\n\t\t\tcellContext:\"cell-contextmenu\",\r\n\t\t\tcellMouseEnter:\"cell-mouseenter\",\r\n\t\t\tcellMouseLeave:\"cell-mouseleave\",\r\n\t\t\tcellMouseOver:\"cell-mouseover\",\r\n\t\t\tcellMouseOut:\"cell-mouseout\",\r\n\t\t\tcellMouseMove:\"cell-mousemove\",\r\n\t\t\tcellTap:\"cell\",\r\n\t\t\tcellDblTap:\"cell\",\r\n\t\t\tcellTapHold:\"cell\",\r\n\r\n\t\t\t//column header events\r\n\t\t\theaderClick:\"column-click\",\r\n\t\t\theaderDblClick:\"column-dblclick\",\r\n\t\t\theaderContext:\"column-contextmenu\",\r\n\t\t\theaderMouseEnter:\"column-mouseenter\",\r\n\t\t\theaderMouseLeave:\"column-mouseleave\",\r\n\t\t\theaderMouseOver:\"column-mouseover\",\r\n\t\t\theaderMouseOut:\"column-mouseout\",\r\n\t\t\theaderMouseMove:\"column-mousemove\",\r\n\t\t\theaderTap:\"column\",\r\n\t\t\theaderDblTap:\"column\",\r\n\t\t\theaderTapHold:\"column\",\r\n\r\n\t\t\t//group header\r\n\t\t\tgroupClick:\"group-click\",\r\n\t\t\tgroupDblClick:\"group-dblclick\",\r\n\t\t\tgroupContext:\"group-contextmenu\",\r\n\t\t\tgroupMouseEnter:\"group-mouseenter\",\r\n\t\t\tgroupMouseLeave:\"group-mouseleave\",\r\n\t\t\tgroupMouseOver:\"group-mouseover\",\r\n\t\t\tgroupMouseOut:\"group-mouseout\",\r\n\t\t\tgroupMouseMove:\"group-mousemove\",\r\n\t\t\tgroupTap:\"group\",\r\n\t\t\tgroupDblTap:\"group\",\r\n\t\t\tgroupTapHold:\"group\",\r\n\t\t}\r\n\r\n\t\tthis.subscribers = {};\r\n\r\n\t\tthis.touchSubscribers = {};\r\n\r\n\t\tthis.columnSubscribers = {};\r\n\r\n\t\tthis.touchWatchers = {\r\n\t\t\trow:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcell:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tcolumn:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t},\r\n\t\t\tgroup:{\r\n\t\t\t\ttap:null,\r\n\t\t\t\ttapDbl:null,\r\n\t\t\t\ttapHold:null,\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.registerColumnOption(\"headerClick\");\r\n\t\tthis.registerColumnOption(\"headerDblClick\");\r\n\t\tthis.registerColumnOption(\"headerContext\");\r\n\t\tthis.registerColumnOption(\"headerMouseEnter\");\r\n\t\tthis.registerColumnOption(\"headerMouseLeave\");\r\n\t\tthis.registerColumnOption(\"headerMouseOver\");\r\n\t\tthis.registerColumnOption(\"headerMouseOut\");\r\n\t\tthis.registerColumnOption(\"headerMouseMove\");\r\n\t\tthis.registerColumnOption(\"headerTap\");\r\n\t\tthis.registerColumnOption(\"headerDblTap\");\r\n\t\tthis.registerColumnOption(\"headerTapHold\");\r\n\r\n\t\tthis.registerColumnOption(\"cellClick\");\r\n\t\tthis.registerColumnOption(\"cellDblClick\");\r\n\t\tthis.registerColumnOption(\"cellContext\");\r\n\t\tthis.registerColumnOption(\"cellMouseEnter\");\r\n\t\tthis.registerColumnOption(\"cellMouseLeave\");\r\n\t\tthis.registerColumnOption(\"cellMouseOver\");\r\n\t\tthis.registerColumnOption(\"cellMouseOut\");\r\n\t\tthis.registerColumnOption(\"cellMouseMove\");\r\n\t\tthis.registerColumnOption(\"cellTap\");\r\n\t\tthis.registerColumnOption(\"cellDblTap\");\r\n\t\tthis.registerColumnOption(\"cellTapHold\");\r\n\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.initializeExternalEvents();\r\n\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this))\r\n\t\tthis.subscribe(\"cell-dblclick\", this.cellContentsSelectionFixer.bind(this))\r\n\t}\r\n\r\n\tcellContentsSelectionFixer(e, cell){\r\n\t\tif(this.table.modExists(\"edit\")){\r\n\t\t\tif (this.table.modules.edit.currentCell === this){\r\n\t\t\t\treturn; //prevent instant selection of editor content\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\ttry{\r\n\t\t\tif (document.selection) { // IE\r\n\t\t\t\tvar range = document.body.createTextRange();\r\n\t\t\t\trange.moveToElementText(this.element);\r\n\t\t\t\trange.select();\r\n\t\t\t} else if (window.getSelection) {\r\n\t\t\t\tvar range = document.createRange();\r\n\t\t\t\trange.selectNode(this.element);\r\n\t\t\t\twindow.getSelection().removeAllRanges();\r\n\t\t\t\twindow.getSelection().addRange(range);\r\n\t\t\t}\r\n\t\t}catch(e){}\r\n\t}\r\n\r\n\tinitializeExternalEvents(){\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tthis.subscriptionChangeExternal(key, this.subscriptionChanged.bind(this, key))\r\n\t\t}\r\n\t}\r\n\r\n\tsubscriptionChanged(key, added){\r\n\t\tvar index;\r\n\r\n\t\tif(added){\r\n\t\t\tif(!this.subscribers[key]){\r\n\t\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\t\tthis.subscribers[key] = this.handle.bind(this, key);\r\n\t\t\t\t\tthis.subscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.subscribeTouchEvents(key);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(this.eventMap[key].includes(\"-\")){\r\n\t\t\t\tif(this.subscribers[key] && !this.columnSubscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\t\t\tthis.unsubscribe(this.eventMap[key], this.subscribers[key]);\r\n\t\t\t\t\tdelete this.subscribers[key];\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.unsubscribeTouchEvents(key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\tsubscribeTouchEvents(key){\r\n\t\tvar type = this.eventMap[key];\r\n\r\n\t\tif(!this.touchSubscribers[type + \"-touchstart\"]){\r\n\t\t\tthis.touchSubscribers[type + \"-touchstart\"] = this.handleTouch.bind(this, type, \"start\");\r\n\t\t\tthis.touchSubscribers[type + \"-touchend\"] = this.handleTouch.bind(this, type, \"end\");\r\n\r\n\t\t\tthis.subscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\tthis.subscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\t\t}\r\n\r\n\t\tthis.subscribers[key] = true;\r\n\t}\r\n\r\n\tunsubscribeTouchEvents(key){\r\n\t\tvar notouch = true,\r\n\t\ttype = this.eventMap[key];\r\n\r\n\t\tif(this.subscribers[key] && !this.subscribedExternal(key)){\r\n\t\t\tdelete this.subscribers[key];\r\n\r\n\t\t\tfor(let i in this.eventMap){\r\n\t\t\t\tif(this.eventMap[i] === type){\r\n\t\t\t\t\tif(this.subscribers[i]){\r\n\t\t\t\t\t\tnotouch = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(notouch){\r\n\t\t\t\tthis.unsubscribe(type + \"-touchstart\", this.touchSubscribers[type + \"-touchstart\"]);\r\n\t\t\t\tthis.unsubscribe(type + \"-touchend\", this.touchSubscribers[type + \"-touchend\"]);\r\n\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchstart\"];\r\n\t\t\t\tdelete this.touchSubscribers[type + \"-touchend\"];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def = column.definition;\r\n\r\n\t\tfor(let key in this.eventMap){\r\n\t\t\tif(def[key]){\r\n\t\t\t\tthis.subscriptionChanged(key, true);\r\n\r\n\t\t\t\tif(!this.columnSubscribers[key]){\r\n\t\t\t\t\tthis.columnSubscribers[key] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.columnSubscribers[key].push(column);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\thandle(action, e, component){\r\n\t\tthis.dispatchEvent(action, e, component);\r\n\t}\r\n\r\n\thandleTouch(type, action, e, component){\r\n\t\tvar watchers = this.touchWatchers[type];\r\n\r\n\t\tif(type === \"column\"){\r\n\t\t\ttype = \"header\";\r\n\t\t}\r\n\r\n\t\tswitch(action){\r\n\t\t\tcase \"start\":\r\n\t\t\twatchers.tap = true;\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\r\n\t\t\twatchers.tapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\t\twatchers.tapHold = null;\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"TapHold\", e, component);\r\n\t\t\t}, 1000);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"end\":\r\n\t\t\tif(watchers.tap){\r\n\r\n\t\t\t\twatchers.tap = null;\r\n\t\t\t\tthis.dispatchEvent(type + \"Tap\", e, component);\r\n\t\t\t}\r\n\r\n\t\t\tif(watchers.tapDbl){\r\n\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\twatchers.tapDbl = null;\r\n\r\n\t\t\t\tthis.dispatchEvent(type + \"DblTap\", e, component);\r\n\t\t\t}else{\r\n\t\t\t\twatchers.tapDbl = setTimeout(() => {\r\n\t\t\t\t\tclearTimeout(watchers.tapDbl);\r\n\t\t\t\t\twatchers.tapDbl = null;\r\n\t\t\t\t}, 300);\r\n\t\t\t}\r\n\r\n\t\t\tclearTimeout(watchers.tapHold);\r\n\t\t\twatchers.tapHold = null;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\tdispatchEvent(action, e, component){\r\n\t\tvar componentObj = component.getComponent(),\r\n\t\tcallback;\r\n\r\n\t\tif(this.columnSubscribers[action]){\r\n\r\n\t\t\tif(component instanceof Cell){\r\n\t\t\t\tcallback = component.column.definition[action];\r\n\t\t\t}else if(component instanceof Column){\r\n\t\t\t\tcallback = component.definition[action];\r\n\t\t\t}\r\n\r\n\t\t\tif(callback){\r\n\t\t\t\tcallback(e, componentObj);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.dispatchExternal(action, e, componentObj);\r\n\t}\r\n}\r\n\r\nInteraction.moduleName = \"interaction\";\r\n\r\nexport default Interaction;","import Module from '../../core/Module.js';\r\n\r\nimport defaultBindings from './defaults/bindings.js';\r\nimport defaultActions from './defaults/actions.js';\r\n\r\nclass Keybindings extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.watchKeys = null;\r\n\t\tthis.pressedKeys = null;\r\n\t\tthis.keyupBinding = false;\r\n\t\tthis.keydownBinding = false;\r\n\r\n\t\tthis.registerTableOption(\"keybindings\", {}); //array for keybindings\r\n\t\tthis.registerTableOption(\"tabEndNewRow\", false); //create new row when tab to end of table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tvar bindings = this.table.options.keybindings,\r\n\t\tmergedBindings = {};\r\n\r\n\t\tthis.watchKeys = {};\r\n\t\tthis.pressedKeys = [];\r\n\r\n\t\tif(bindings !== false){\r\n\t\t\tObject.assign(mergedBindings, Keybindings.bindings)\r\n\t\t\tObject.assign(mergedBindings, bindings)\r\n\r\n\t\t\tthis.mapBindings(mergedBindings);\r\n\t\t\tthis.bindEvents();\r\n\t\t}\r\n\r\n\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t}\r\n\r\n\tmapBindings(bindings){\r\n\t\tfor(let key in bindings){\r\n\t\t\tif(Keybindings.actions[key]){\r\n\t\t\t\tif(bindings[key]){\r\n\t\t\t\t\tif(typeof bindings[key] !== \"object\"){\r\n\t\t\t\t\t\tbindings[key] = [bindings[key]];\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbindings[key].forEach((binding) => {\r\n\t\t\t\t\t\tvar bindingList = Array.isArray(binding) ? binding : [binding];\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tbindingList.forEach((item) => {\r\n\t\t\t\t\t\t\tthis.mapBinding(key, item);\r\n\t\t\t\t\t\t});\t\t\t\t\t\t\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Key Binding Error - no such action:\", key);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmapBinding(action, symbolsList){\r\n\t\tvar binding = {\r\n\t\t\taction: Keybindings.actions[action],\r\n\t\t\tkeys: [],\r\n\t\t\tctrl: false,\r\n\t\t\tshift: false,\r\n\t\t\tmeta: false,\r\n\t\t};\r\n\r\n\t\tvar symbols = symbolsList.toString().toLowerCase().split(\" \").join(\"\").split(\"+\");\r\n\r\n\t\tsymbols.forEach((symbol) => {\r\n\t\t\tswitch(symbol){\r\n\t\t\t\tcase \"ctrl\":\r\n\t\t\t\tbinding.ctrl = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"shift\":\r\n\t\t\t\tbinding.shift = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"meta\":\r\n\t\t\t\tbinding.meta = true;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tdefault:\r\n\t\t\t\tsymbol = isNaN(symbol) ? symbol.toUpperCase().charCodeAt(0) : parseInt(symbol);\r\n\t\t\t\tbinding.keys.push(symbol);\r\n\r\n\t\t\t\tif(!this.watchKeys[symbol]){\r\n\t\t\t\t\tthis.watchKeys[symbol] = [];\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.watchKeys[symbol].push(binding);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tbindEvents(){\r\n\t\tvar self = this;\r\n\r\n\t\tthis.keyupBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tself.pressedKeys.push(code);\r\n\r\n\t\t\t\tbindings.forEach(function(binding){\r\n\t\t\t\t\tself.checkBinding(e, binding);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.keydownBinding = function(e){\r\n\t\t\tvar code = e.keyCode;\r\n\t\t\tvar bindings = self.watchKeys[code];\r\n\r\n\t\t\tif(bindings){\r\n\r\n\t\t\t\tvar index = self.pressedKeys.indexOf(code);\r\n\r\n\t\t\t\tif(index > -1){\r\n\t\t\t\t\tself.pressedKeys.splice(index, 1);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tthis.table.element.addEventListener(\"keydown\", this.keyupBinding);\r\n\r\n\t\tthis.table.element.addEventListener(\"keyup\", this.keydownBinding);\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.keyupBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keydown\", this.keyupBinding);\r\n\t\t}\r\n\r\n\t\tif(this.keydownBinding){\r\n\t\t\tthis.table.element.removeEventListener(\"keyup\", this.keydownBinding);\r\n\t\t}\r\n\t}\r\n\r\n\tcheckBinding(e, binding){\r\n\t\tvar match = true;\r\n\r\n\t\tif(e.ctrlKey == binding.ctrl && e.shiftKey == binding.shift && e.metaKey == binding.meta){\r\n\t\t\tbinding.keys.forEach((key) => {\r\n\t\t\t\tvar index = this.pressedKeys.indexOf(key);\r\n\r\n\t\t\t\tif(index == -1){\r\n\t\t\t\t\tmatch = false;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tif(match){\r\n\t\t\t\tbinding.action.call(this, e);\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t}\r\n}\r\n\r\nKeybindings.moduleName = \"keybindings\";\r\n\r\n//load defaults\r\nKeybindings.bindings = defaultBindings;\r\nKeybindings.actions = defaultActions;\r\n\r\nexport default Keybindings;","export default {\r\n\tnavPrev:\"shift + 9\",\r\n\tnavNext:9,\r\n\tnavUp:38,\r\n\tnavDown:40,\r\n\tscrollPageUp:33,\r\n\tscrollPageDown:34,\r\n\tscrollToStart:36,\r\n\tscrollToEnd:35,\r\n\tundo:[\"ctrl + 90\", \"meta + 90\"],\r\n\tredo:[\"ctrl + 89\", \"meta + 89\"],\r\n\tcopyToClipboard:[\"ctrl + 67\", \"meta + 89\"],\r\n};","export default {\r\n\tkeyBlock:function(e){\r\n\t\te.stopPropagation();\r\n\t\te.preventDefault();\r\n\t},\r\n\tscrollPageUp:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop - rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos >= 0){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollPageDown:function(e){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tnewPos = rowManager.scrollTop + rowManager.element.clientHeight,\r\n\t\tscrollMax = rowManager.element.scrollHeight;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\tif(newPos <= scrollMax){\r\n\t\t\t\trowManager.element.scrollTop = newPos;\r\n\t\t\t}else{\r\n\t\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\r\n\t},\r\n\tscrollToStart:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[0]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tscrollToEnd:function(e){\r\n\t\tvar rowManager = this.table.rowManager;\r\n\r\n\t\te.preventDefault();\r\n\r\n\t\tif(rowManager.displayRowsCount){\r\n\t\t\trowManager.scrollToRow(rowManager.getDisplayRows()[rowManager.displayRowsCount - 1]);\r\n\t\t}\r\n\r\n\t\tthis.table.element.focus();\r\n\t},\r\n\tnavPrev:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-prev\", e);\r\n\t},\r\n\r\n\tnavNext:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-next\", e);\r\n\t},\r\n\r\n\tnavLeft:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-left\", e);\r\n\t},\r\n\r\n\tnavRight:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-right\", e);\r\n\t},\r\n\r\n\tnavUp:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-up\", e);\r\n\t},\r\n\r\n\tnavDown:function(e){\r\n\t\tthis.dispatch(\"keybinding-nav-down\", e);\r\n\t},\r\n\r\n\tundo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.undo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tredo:function(e){\r\n\t\tvar cell = false;\r\n\t\tif(this.table.options.history && this.table.modExists(\"history\") && this.table.modExists(\"edit\")){\r\n\r\n\t\t\tcell = this.table.modules.edit.currentCell;\r\n\r\n\t\t\tif(!cell){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tthis.table.modules.history.redo();\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tcopyToClipboard:function(e){\r\n\t\tif(!this.table.modules.edit.currentCell){\r\n\t\t\tif(this.table.modExists(\"clipboard\", true)){\r\n\t\t\t\tthis.table.modules.clipboard.copy(false, true);\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Menu extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.menuContainer = null;\r\n\t\tthis.menuElements = [];\r\n\t\tthis.blurEvent = this.hideMenu.bind(this);\r\n\t\tthis.escEvent = this.escMenu.bind(this);\r\n\t\tthis.nestedMenuBlock = false;\r\n\t\tthis.positionReversedX = false;\r\n\t\t\r\n\t\tthis.currentComponent = null;\r\n\t\t\r\n\t\tthis.columnSubscribers = {};\r\n\t\t\r\n\t\tthis.registerTableOption(\"rowContextMenu\", false);\r\n\t\tthis.registerTableOption(\"rowClickMenu\", false);\r\n\t\tthis.registerTableOption(\"groupContextMenu\", false);\r\n\t\tthis.registerTableOption(\"groupClickMenu\", false);\r\n\t\tthis.registerTableOption(\"menuContainer\", false);\r\n\t\t\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerClickMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tthis.lookupMenuContainer();\r\n\t\t\r\n\t\tthis.initializeRowWatchers();\r\n\t\tthis.initializeGroupWatchers();\r\n\t\t\r\n\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t}\r\n\t\r\n\tlookupMenuContainer(){\r\n\t\t\r\n\t\tthis.menuContainer = this.table.options.menuContainer;\r\n\t\t\r\n\t\tif(typeof this.menuContainer === \"string\"){\r\n\t\t\tthis.menuContainer = document.querySelector(this.menuContainer);\r\n\t\t\t\r\n\t\t\tif(!this.menuContainer){\r\n\t\t\t\tconsole.warn(\"Menu Error - no container element found matching selector:\", this.table.options.menuContainer , \"(defaulting to document body)\");\r\n\t\t\t}\r\n\t\t}else if (this.menuContainer === true){\r\n\t\t\tthis.menuContainer = this.table.element;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.menuContainer && !this.checkMenuContainerIsParent(this.menuContainer)){\r\n\t\t\tthis.menuContainer = false;\r\n\t\t\tconsole.warn(\"Menu Error - container element does not contain this table:\", this.table.options.menuContainer , \"(defaulting to document body)\");\r\n\t\t}\r\n\t\t\r\n\t\tif(!this.menuContainer){\r\n\t\t\tthis.menuContainer = document.body;\r\n\t\t}\r\n\t}\r\n\t\r\n\tcheckMenuContainerIsParent(container, element = this.table.element){\r\n\t\tif(container === element){\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\treturn element.parentNode ? this.checkMenuContainerIsParent(container, element.parentNode) : false;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeRowWatchers(){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\tthis.subscribe(\"row-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t\tthis.table.on(\"rowTapHold\", this.loadMenuEvent.bind(this, this.table.options.rowContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\tthis.subscribe(\"row-click\", this.loadMenuEvent.bind(this, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeGroupWatchers(){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tthis.subscribe(\"group-contextmenu\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t\tthis.table.on(\"groupTapHold\", this.loadMenuEvent.bind(this, this.table.options.groupContextMenu));\r\n\t\t}\r\n\t\t\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tthis.subscribe(\"group-click\", this.loadMenuEvent.bind(this, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar options = [\"headerContextMenu\", \"headerClickMenu\"],\r\n\t\tdef = column.definition;\r\n\t\t\r\n\t\t//handle column events\r\n\t\tif(def.headerContextMenu && !this.columnSubscribers.headerContextMenu){\r\n\t\t\tthis.columnSubscribers.headerContextMenu = this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\");\r\n\t\t\tthis.subscribe(\"column-contextmenu\", this.columnSubscribers.headerContextMenu);\r\n\t\t\tthis.table.on(\"headerTapHold\", this.loadMenuTableColumnEvent.bind(this, \"headerContextMenu\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerClickMenu && !this.columnSubscribers.headerClickMenu){\r\n\t\t\tthis.columnSubscribers.headerClickMenu = this.loadMenuTableColumnEvent.bind(this, \"headerClickMenu\");\r\n\t\t\tthis.subscribe(\"column-click\", this.columnSubscribers.headerClickMenu);\r\n\t\t}\r\n\t\t\r\n\t\tif(def.headerMenu){\r\n\t\t\tthis.initializeColumnHeaderMenu(column);\r\n\t\t}\r\n\t\t\r\n\t\t//handle cell events\r\n\t\tif(def.contextMenu && !this.columnSubscribers.contextMenu){\r\n\t\t\tthis.columnSubscribers.contextMenu = this.loadMenuTableCellEvent.bind(this, \"contextMenu\");\r\n\t\t\tthis.subscribe(\"cell-contextmenu\", this.columnSubscribers.contextMenu);\r\n\t\t\tthis.table.on(\"cellTapHold\", this.loadMenuTableCellEvent.bind(this, \"contextMenu\"))\r\n\t\t}\r\n\t\t\r\n\t\tif(def.clickMenu && !this.columnSubscribers.clickMenu){\r\n\t\t\tthis.columnSubscribers.clickMenu = this.loadMenuTableCellEvent.bind(this, \"clickMenu\");\r\n\t\t\tthis.subscribe(\"cell-click\", this.columnSubscribers.clickMenu);\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumnHeaderMenu(column){\r\n\t\tvar headerMenuEl;\r\n\t\t\r\n\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\t\t\r\n\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\te.stopPropagation();\r\n\t\t\te.preventDefault();\r\n\t\t\t\r\n\t\t\tthis.loadMenuEvent(column.definition.headerMenu, e, column);\r\n\t\t});\r\n\t\t\r\n\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t}\r\n\t\r\n\tloadMenuTableCellEvent(option, e, cell){\r\n\t\tif(cell._cell){\r\n\t\t\tcell = cell._cell;\r\n\t\t}\r\n\t\t\r\n\t\tif(cell.column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(cell.column.definition[option], e, cell);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuTableColumnEvent(option, e, column){\r\n\t\tif(column._column){\r\n\t\t\tcolumn = column._column;\r\n\t\t}\r\n\t\t\r\n\t\tif(column.definition[option]){\r\n\t\t\tthis.loadMenuEvent(column.definition[option], e, column);\r\n\t\t}\r\n\t}\r\n\t\r\n\tloadMenuEvent(menu, e, component){\r\n\t\tif(component._group){\r\n\t\t\tcomponent = component._group;\r\n\t\t}else if(component._row){\r\n\t\t\tcomponent = component._row;\r\n\t\t}\r\n\t\t\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\t\t\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\t\r\n\tloadMenu(e, component, menu, parentEl){\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\t\t\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\t\t\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\t\t\r\n\t\t//abort if no menu set\r\n\t\tif(!menu || !menu.length){\r\n\t\t\treturn;\r\n\t\t}\r\n\t\t\r\n\t\tif(!parentEl){\r\n\t\t\tif(this.nestedMenuBlock){\r\n\t\t\t\t//abort if child menu already open\r\n\t\t\t\tif(this.isOpen()){\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tthis.nestedMenuBlock = setTimeout(() => {\r\n\t\t\t\t\tthis.nestedMenuBlock = false;\r\n\t\t\t\t}, 100)\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\t\t\r\n\t\tmenu.forEach((item) => {\r\n\t\t\tvar itemEl = document.createElement(\"div\"),\r\n\t\t\tlabel = item.label,\r\n\t\t\tdisabled = item.disabled;\r\n\t\t\t\r\n\t\t\tif(item.separator){\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-separator\");\r\n\t\t\t}else{\r\n\t\t\t\titemEl.classList.add(\"tabulator-menu-item\");\r\n\t\t\t\t\r\n\t\t\t\tif(typeof label == \"function\"){\r\n\t\t\t\t\tlabel = label.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(label instanceof Node){\r\n\t\t\t\t\titemEl.appendChild(label);\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = label;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(typeof disabled == \"function\"){\r\n\t\t\t\t\tdisabled = disabled.call(this.table, component.getComponent());\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(disabled){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-disabled\");\r\n\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\t\tthis.hideOldSubMenus(menuEl);\r\n\t\t\t\t\t\t\tthis.loadMenu(e, component, item.menu, itemEl);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(item.action){\r\n\t\t\t\t\t\t\titemEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\t\t\t\t\titem.action(e, component.getComponent());\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(item.menu && item.menu.length){\r\n\t\t\t\t\titemEl.classList.add(\"tabulator-menu-item-submenu\");\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\t\t\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\t\t\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t\t\r\n\t\tthis.currentComponent = component\r\n\t\t\r\n\t\tthis.dispatchExternal(\"menuOpened\", component.getComponent())\r\n\t}\r\n\t\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tfor(let i = this.menuElements.length - 1; i > index; i--){\r\n\t\t\t\tvar el = this.menuElements[i];\r\n\t\t\t\t\r\n\t\t\t\tif(el.parentNode){\r\n\t\t\t\t\tel.parentNode.removeChild(el);\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar x, y, parentOffset;\r\n\t\t\r\n\t\tif(!parentEl){\r\n\t\t\tx = touch ? e.touches[0].pageX : e.pageX;\r\n\t\t\ty = touch ? e.touches[0].pageY : e.pageY;\r\n\t\t\t\r\n\t\t\tif(this.menuContainer !== document.body){\r\n\t\t\t\tparentOffset = Helpers.elOffset(this.menuContainer);\r\n\t\t\t\t\r\n\t\t\t\tx -= parentOffset.left;\r\n\t\t\t\ty -= parentOffset.top;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.positionReversedX = false;\r\n\t\t}else{\r\n\t\t\tparentOffset = Helpers.elOffset(parentEl);\r\n\t\t\tx = parentOffset.left + parentEl.offsetWidth;\r\n\t\t\ty = parentOffset.top - 1;\r\n\t\t}\r\n\t\t\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\t\t\r\n\t\tsetTimeout(() => {\r\n\t\t\tthis.table.rowManager.element.addEventListener(\"scroll\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"click\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"contextmenu\", this.blurEvent);\r\n\t\t\twindow.addEventListener(\"resize\", this.blurEvent);\r\n\t\t\tdocument.body.addEventListener(\"keydown\", this.escEvent);\r\n\t\t}, 100);\r\n\t\t\r\n\t\tthis.menuContainer.appendChild(element);\r\n\t\t\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= this.menuContainer.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\t\t\t\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (this.menuContainer.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (this.menuContainer.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t\t\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= this.menuContainer.offsetHeight){\r\n\t\t\telement.style.top = \"\";\r\n\t\t\t\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (this.menuContainer.offsetHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (this.menuContainer.offsetHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\t\r\n\tescMenu(e){\r\n\t\tif(e.keyCode == 27){\r\n\t\t\tthis.hideMenu();\r\n\t\t}\r\n\t}\r\n\t\r\n\thideMenu(){\t\r\n\t\tthis.menuElements.forEach((menuEl) => {\r\n\t\t\tif(menuEl.parentNode){\r\n\t\t\t\tmenuEl.parentNode.removeChild(menuEl);\r\n\t\t\t}\r\n\t\t});\r\n\t\t\r\n\t\tdocument.body.removeEventListener(\"keydown\", this.escEvent);\r\n\t\tdocument.body.removeEventListener(\"click\", this.blurEvent);\r\n\t\tdocument.body.removeEventListener(\"contextmenu\", this.blurEvent);\r\n\t\twindow.removeEventListener(\"resize\", this.blurEvent);\r\n\t\tthis.table.rowManager.element.removeEventListener(\"scroll\", this.blurEvent);\r\n\t\t\r\n\t\tif(this.currentComponent){\r\n\t\t\tthis.dispatchExternal(\"menuClosed\", this.currentComponent.getComponent());\r\n\t\t\tthis.currentComponent = null;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMenu.moduleName = \"menu\";\r\n\r\nexport default Menu;","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveColumns extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating column header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 250; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving column\r\n\t\tthis.toCol = false; //destination column\r\n\t\tthis.toColAfter = false; //position of moving column relative to the desitnation column\r\n\t\tthis.startX = 0; //starting position within header element\r\n\t\tthis.autoScrollMargin = 40; //auto scroll on edge when within margin\r\n\t\tthis.autoScrollStep = 5; //auto scroll distance in pixels\r\n\t\tthis.autoScrollTimeout = false; //auto scroll timeout\r\n\t\tthis.touchMove = false;\r\n\t\t\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\t\r\n\t\tthis.registerTableOption(\"movableColumns\", false); //enable movable columns\r\n\t}\r\n\t\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\t\t\r\n\t\tel.classList.add(\"tabulator-col\");\r\n\t\tel.classList.add(\"tabulator-col-placeholder\");\r\n\t\t\r\n\t\treturn el;\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableColumns){\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\tcolEl;\r\n\t\t\r\n\t\tif(!column.modules.frozen){\r\n\t\t\tcolEl = column.getElement();\r\n\t\t\t\r\n\t\t\tconfig.mousemove = function(e){\r\n\t\t\t\tif(column.parent === self.moving.parent){\r\n\t\t\t\t\tif((((self.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(colEl).left) + self.table.columnManager.element.scrollLeft) > (column.getWidth() / 2)){\r\n\t\t\t\t\t\tif(self.toCol !== column || !self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl.nextSibling);\r\n\t\t\t\t\t\t\tself.moveColumn(column, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(self.toCol !== column || self.toColAfter){\r\n\t\t\t\t\t\t\tcolEl.parentNode.insertBefore(self.placeholderElement, colEl);\r\n\t\t\t\t\t\t\tself.moveColumn(column, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}.bind(self);\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tself.touchMove = false;\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, column);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tcolEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tself.bindTouchEvents(column);\r\n\t\t}\r\n\t\t\r\n\t\tcolumn.modules.moveColumn = config;\r\n\t}\r\n\t\r\n\tbindTouchEvents(column){\r\n\t\tvar colEl = column.getElement(),\r\n\t\tstartXMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentCol, nextCol, prevCol, nextColWidth, prevColWidth, nextColWidthLast, prevColWidthLast;\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentCol = column;\r\n\t\t\t\tnextCol = column.nextColumn();\r\n\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth()/2 : 0;\r\n\t\t\t\tprevCol = column.prevColumn();\r\n\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth()/2 : 0;\r\n\t\t\t\tnextColWidthLast = 0;\r\n\t\t\t\tprevColWidthLast = 0;\r\n\t\t\t\tstartXMove = false;\r\n\t\t\t\t\r\n\t\t\t\tthis.startMove(e, column);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchmove\", (e) => {\r\n\t\t\tvar halfCol, diff, moveToCol;\r\n\t\t\t\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.moveHover(e);\r\n\t\t\t\t\r\n\t\t\t\tif(!startXMove){\r\n\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tdiff = e.touches[0].pageX - startXMove;\r\n\t\t\t\t\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextCol && diff - nextColWidthLast > nextColWidth){\r\n\t\t\t\t\t\tmoveToCol = nextCol;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevCol && -diff - prevColWidthLast > prevColWidth){\r\n\t\t\t\t\t\tmoveToCol = prevCol;\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\tif(moveToCol !== column){\r\n\t\t\t\t\t\t\tstartXMove = e.touches[0].pageX;\r\n\t\t\t\t\t\t\tmoveToCol.getElement().parentNode.insertBefore(this.placeholderElement, moveToCol.getElement());\r\n\t\t\t\t\t\t\tthis.moveColumn(moveToCol, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tif(moveToCol){\r\n\t\t\t\t\tcurrentCol = moveToCol;\r\n\t\t\t\t\tnextCol = moveToCol.nextColumn();\r\n\t\t\t\t\tnextColWidthLast = nextColWidth;\r\n\t\t\t\t\tnextColWidth = nextCol ? nextCol.getWidth() / 2 : 0;\r\n\t\t\t\t\tprevCol = moveToCol.prevColumn();\r\n\t\t\t\t\tprevColWidthLast = prevColWidth;\r\n\t\t\t\t\tprevColWidth = prevCol ? prevCol.getWidth() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}, {passive: true});\r\n\t\t\r\n\t\tcolEl.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tstartMove(e, column){\r\n\t\tvar element = column.getElement(),\r\n\t\theaderElement = this.table.columnManager.getElement(),\r\n\t\theadersElement = this.table.columnManager.getHeadersElement();\r\n\t\t\r\n\t\tthis.moving = column;\r\n\t\tthis.startX = (this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(element).left;\r\n\t\t\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\t\t\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = column.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = column.getHeight() + \"px\";\r\n\t\t\r\n\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\telement.parentNode.removeChild(element);\r\n\t\t\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\t\t\r\n\t\tthis.table.columnManager.getElement().appendChild(this.hoverElement);\r\n\t\t\r\n\t\tthis.hoverElement.style.left = \"0\";\r\n\t\tthis.hoverElement.style.bottom = (headerElement.clientHeight - headersElement.offsetHeight) + \"px\";\r\n\t\t\r\n\t\tif(!this.touchMove){\r\n\t\t\tthis._bindMouseMove();\r\n\t\t\t\r\n\t\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\t\t}\r\n\t\t\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\t\r\n\t_bindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().addEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(column){\r\n\t\t\tif(column.modules.moveColumn.mousemove){\r\n\t\t\t\tcolumn.getElement().removeEventListener(\"mousemove\", column.modules.moveColumn.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\t\r\n\tmoveColumn(column, after){\r\n\t\tvar movingCells = this.moving.getCells();\r\n\t\t\r\n\t\tthis.toCol = column;\r\n\t\tthis.toColAfter = after;\r\n\t\t\r\n\t\tif(after){\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl.nextSibling);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}else{\r\n\t\t\tcolumn.getCells().forEach(function(cell, i){\r\n\t\t\t\tvar cellEl = cell.getElement(true);\r\n\t\t\t\t\r\n\t\t\t\tif(cellEl.parentNode && movingCells[i]){\r\n\t\t\t\t\tcellEl.parentNode.insertBefore(movingCells[i].getElement(), cellEl);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\t\r\n\tendMove(e){\r\n\t\tif(e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\t\t\t\r\n\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\t\t\t\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\t\t\t\r\n\t\t\tif(this.toCol){\r\n\t\t\t\tthis.table.columnManager.moveColumnActual(this.moving, this.toCol, this.toColAfter);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toCol = false;\r\n\t\t\tthis.toColAfter = false;\r\n\t\t\t\r\n\t\t\tif(!this.touchMove){\r\n\t\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\tmoveHover(e){\r\n\t\tvar columnHolder = this.table.columnManager.getElement(),\r\n\t\tscrollLeft = columnHolder.scrollLeft,\r\n\t\txPos = ((this.touchMove ? e.touches[0].pageX : e.pageX) - Helpers.elOffset(columnHolder).left) + scrollLeft,\r\n\t\tscrollPos;\r\n\t\t\r\n\t\tthis.hoverElement.style.left = (xPos - this.startX) + \"px\";\r\n\t\t\r\n\t\tif(xPos - scrollLeft < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.max(0,scrollLeft-5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tif(scrollLeft + columnHolder.clientWidth - xPos < this.autoScrollMargin){\r\n\t\t\tif(!this.autoScrollTimeout){\r\n\t\t\t\tthis.autoScrollTimeout = setTimeout(() => {\r\n\t\t\t\t\tscrollPos = Math.min(columnHolder.clientWidth, scrollLeft+5);\r\n\t\t\t\t\tthis.table.rowManager.getElement().scrollLeft = scrollPos;\r\n\t\t\t\t\tthis.autoScrollTimeout = false;\r\n\t\t\t\t}, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveColumns.moduleName = \"moveColumn\";\r\n\r\nexport default MoveColumns;\r\n","import Module from '../../core/Module.js';\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass MoveRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.placeholderElement = this.createPlaceholderElement();\r\n\t\tthis.hoverElement = false; //floating row header element\r\n\t\tthis.checkTimeout = false; //click check timeout holder\r\n\t\tthis.checkPeriod = 150; //period to wait on mousedown to consider this a move and not a click\r\n\t\tthis.moving = false; //currently moving row\r\n\t\tthis.toRow = false; //destination row\r\n\t\tthis.toRowAfter = false; //position of moving row relative to the desitnation row\r\n\t\tthis.hasHandle = false; //row has handle instead of fully movable row\r\n\t\tthis.startY = 0; //starting Y position within header element\r\n\t\tthis.startX = 0; //starting X position within header element\r\n\r\n\t\tthis.moveHover = this.moveHover.bind(this);\r\n\t\tthis.endMove = this.endMove.bind(this);\r\n\t\tthis.tableRowDropEvent = false;\r\n\r\n\t\tthis.touchMove = false;\r\n\r\n\t\tthis.connection = false;\r\n\t\tthis.connectionSelectorsTables = false;\r\n\t\tthis.connectionSelectorsElements = false;\r\n\t\tthis.connectionElements = [];\r\n\t\tthis.connections = [];\r\n\r\n\t\tthis.connectedTable = false;\r\n\t\tthis.connectedRow = false;\r\n\r\n\t\tthis.registerTableOption(\"movableRows\", false); //enable movable rows\r\n\t\tthis.registerTableOption(\"movableRowsConnectedTables\", false); //tables for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsConnectedElements\", false); //other elements for movable rows to be connected to\r\n\t\tthis.registerTableOption(\"movableRowsSender\", false);\r\n\t\tthis.registerTableOption(\"movableRowsReceiver\", \"insert\");\r\n\r\n\t\tthis.registerColumnOption(\"rowHandle\");\r\n\t}\r\n\r\n\tcreatePlaceholderElement(){\r\n\t\tvar el = document.createElement(\"div\");\r\n\r\n\t\tel.classList.add(\"tabulator-row\");\r\n\t\tel.classList.add(\"tabulator-row-placeholder\");\r\n\r\n\t\treturn el;\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.movableRows){\r\n\t\t\tthis.connectionSelectorsTables = this.table.options.movableRowsConnectedTables;\r\n\t\t\tthis.connectionSelectorsElements = this.table.options.movableRowsConnectedElements;\r\n\r\n\t\t\tthis.connection = this.connectionSelectorsTables || this.connectionSelectorsElements;\r\n\r\n\t\t\tthis.subscribe(\"cell-init\", this.initializeCell.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroupHeader(group){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tif(((e.pageY - Helpers.elOffset(group.element).top) + self.table.rowManager.element.scrollTop) > (group.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== group || !self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(group, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== group || self.toRowAfter){\r\n\t\t\t\t\tvar rowEl = group.getElement();\r\n\t\t\t\t\tif(rowEl.previousSibling){\r\n\t\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\t\tself.moveRow(group, false);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\t\tgroup.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\tconfig = {},\r\n\t\trowEl;\r\n\r\n\t\t//inter table drag drop\r\n\t\tconfig.mouseup = function(e){\r\n\t\t\tself.tableRowDrop(e, row);\r\n\t\t}.bind(self);\r\n\r\n\t\t//same table drag drop\r\n\t\tconfig.mousemove = function(e){\r\n\t\t\tvar rowEl = row.getElement();\r\n\r\n\t\t\tif(((e.pageY - Helpers.elOffset(rowEl).top) + self.table.rowManager.element.scrollTop) > (row.getHeight() / 2)){\r\n\t\t\t\tif(self.toRow !== row || !self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl.nextSibling);\r\n\t\t\t\t\tself.moveRow(row, true);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(self.toRow !== row || self.toRowAfter){\r\n\t\t\t\t\trowEl.parentNode.insertBefore(self.placeholderElement, rowEl);\r\n\t\t\t\t\tself.moveRow(row, false);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}.bind(self);\r\n\r\n\r\n\t\tif(!this.hasHandle){\r\n\r\n\t\t\trowEl = row.getElement();\r\n\r\n\t\t\trowEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\trowEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(row, row.getElement());\r\n\t\t}\r\n\r\n\t\trow.modules.moveRow = config;\r\n\t}\r\n\r\n\tinitializeColumn(column){\r\n\t\tif(column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tthis.hasHandle = true;\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.rowHandle && this.table.options.movableRows !== false){\r\n\t\t\tvar self = this,\r\n\t\t\tcellEl = cell.getElement(true);\r\n\r\n\t\t\tcellEl.addEventListener(\"mousedown\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tself.checkTimeout = setTimeout(function(){\r\n\t\t\t\t\t\tself.startMove(e, cell.row);\r\n\t\t\t\t\t}, self.checkPeriod);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tcellEl.addEventListener(\"mouseup\", function(e){\r\n\t\t\t\tif(e.which === 1){\r\n\t\t\t\t\tif(self.checkTimeout){\r\n\t\t\t\t\t\tclearTimeout(self.checkTimeout);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.bindTouchEvents(cell.row, cellEl);\r\n\t\t}\r\n\t}\r\n\r\n\tbindTouchEvents(row, element){\r\n\t\tvar startYMove = false, //shifting center position of the cell\r\n\t\tdir = false,\r\n\t\tcurrentRow, nextRow, prevRow, nextRowHeight, prevRowHeight, nextRowHeightLast, prevRowHeightLast;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tthis.checkTimeout = setTimeout(() => {\r\n\t\t\t\tthis.touchMove = true;\r\n\t\t\t\tcurrentRow = row;\r\n\t\t\t\tnextRow = row.nextRow();\r\n\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight()/2 : 0;\r\n\t\t\t\tprevRow = row.prevRow();\r\n\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight()/2 : 0;\r\n\t\t\t\tnextRowHeightLast = 0;\r\n\t\t\t\tprevRowHeightLast = 0;\r\n\t\t\t\tstartYMove = false;\r\n\r\n\t\t\t\tthis.startMove(e, row);\r\n\t\t\t}, this.checkPeriod);\r\n\t\t}, {passive: true});\r\n\t\tthis.moving, this.toRow, this.toRowAfter\r\n\t\telement.addEventListener(\"touchmove\", (e) => {\r\n\r\n\t\t\tvar halfCol, diff, moveToRow;\r\n\r\n\t\t\tif(this.moving){\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.moveHover(e);\r\n\r\n\t\t\t\tif(!startYMove){\r\n\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tdiff = e.touches[0].pageY - startYMove;\r\n\r\n\t\t\t\tif(diff > 0){\r\n\t\t\t\t\tif(nextRow && diff - nextRowHeightLast > nextRowHeight){\r\n\t\t\t\t\t\tmoveToRow = nextRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement().nextSibling);\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, true);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(prevRow && -diff - prevRowHeightLast > prevRowHeight){\r\n\t\t\t\t\t\tmoveToRow = prevRow;\r\n\r\n\t\t\t\t\t\tif(moveToRow !== row){\r\n\t\t\t\t\t\t\tstartYMove = e.touches[0].pageY;\r\n\t\t\t\t\t\t\tmoveToRow.getElement().parentNode.insertBefore(this.placeholderElement, moveToRow.getElement());\r\n\t\t\t\t\t\t\tthis.moveRow(moveToRow, false);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(moveToRow){\r\n\t\t\t\t\tcurrentRow = moveToRow;\r\n\t\t\t\t\tnextRow = moveToRow.nextRow();\r\n\t\t\t\t\tnextRowHeightLast = nextRowHeight;\r\n\t\t\t\t\tnextRowHeight = nextRow ? nextRow.getHeight() / 2 : 0;\r\n\t\t\t\t\tprevRow = moveToRow.prevRow();\r\n\t\t\t\t\tprevRowHeightLast = prevRowHeight;\r\n\t\t\t\t\tprevRowHeight = prevRow ? prevRow.getHeight() / 2 : 0;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tif(this.checkTimeout){\r\n\t\t\t\tclearTimeout(this.checkTimeout);\r\n\t\t\t}\r\n\t\t\tif(this.moving){\r\n\t\t\t\tthis.endMove(e);\r\n\t\t\t\tthis.touchMove = false;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_bindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().addEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t_unbindMouseMove(){\r\n\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\tif((row.type === \"row\" || row.type === \"group\") && row.modules.moveRow && row.modules.moveRow.mousemove){\r\n\t\t\t\trow.getElement().removeEventListener(\"mousemove\", row.modules.moveRow.mousemove);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tstartMove(e, row){\r\n\t\tvar element = row.getElement();\r\n\r\n\t\tthis.setStartPosition(e, row);\r\n\r\n\t\tthis.moving = row;\r\n\r\n\t\tthis.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\t//create placeholder\r\n\t\tthis.placeholderElement.style.width = row.getWidth() + \"px\";\r\n\t\tthis.placeholderElement.style.height = row.getHeight() + \"px\";\r\n\r\n\t\tif(!this.connection){\r\n\t\t\telement.parentNode.insertBefore(this.placeholderElement, element);\r\n\t\t\telement.parentNode.removeChild(element);\r\n\t\t}else{\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-sending\");\r\n\t\t\tthis.connectToTables(row);\r\n\t\t}\r\n\r\n\t\t//create hover element\r\n\t\tthis.hoverElement = element.cloneNode(true);\r\n\t\tthis.hoverElement.classList.add(\"tabulator-moving\");\r\n\r\n\t\tif(this.connection){\r\n\t\t\tdocument.body.appendChild(this.hoverElement);\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\t\t\tthis.hoverElement.style.width = this.table.element.clientWidth + \"px\";\r\n\t\t\tthis.hoverElement.style.whiteSpace = \"nowrap\";\r\n\t\t\tthis.hoverElement.style.overflow = \"hidden\";\r\n\t\t\tthis.hoverElement.style.pointerEvents = \"none\";\r\n\t\t}else{\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(this.hoverElement);\r\n\r\n\t\t\tthis.hoverElement.style.left = \"0\";\r\n\t\t\tthis.hoverElement.style.top = \"0\";\r\n\r\n\t\t\tthis._bindMouseMove();\r\n\t\t}\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", this.moveHover);\r\n\t\tdocument.body.addEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\tthis.dispatchExternal(\"rowMoving\", row.getComponent());\r\n\r\n\t\tthis.moveHover(e);\r\n\t}\r\n\r\n\tsetStartPosition(e, row){\r\n\t\tvar pageX = this.touchMove ? e.touches[0].pageX : e.pageX,\r\n\t\tpageY = this.touchMove ? e.touches[0].pageY : e.pageY,\r\n\t\telement, position;\r\n\r\n\t\telement = row.getElement();\r\n\t\tif(this.connection){\r\n\t\t\tposition = element.getBoundingClientRect();\r\n\r\n\t\t\tthis.startX = position.left - pageX + window.pageXOffset;\r\n\t\t\tthis.startY = position.top - pageY + window.pageYOffset;\r\n\t\t}else{\r\n\t\t\tthis.startY = (pageY - element.getBoundingClientRect().top);\r\n\t\t}\r\n\t}\r\n\r\n\tendMove(e){\r\n\t\tif(!e || e.which === 1 || this.touchMove){\r\n\t\t\tthis._unbindMouseMove();\r\n\r\n\t\t\tif(!this.connection){\r\n\t\t\t\tthis.placeholderElement.parentNode.insertBefore(this.moving.getElement(), this.placeholderElement.nextSibling);\r\n\t\t\t\tthis.placeholderElement.parentNode.removeChild(this.placeholderElement);\r\n\t\t\t}\r\n\r\n\t\t\tthis.hoverElement.parentNode.removeChild(this.hoverElement);\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tif(this.toRow){\r\n\t\t\t\tthis.table.rowManager.moveRow(this.moving, this.toRow, this.toRowAfter);\r\n\t\t\t}else{\r\n\t\t\t\tthis.dispatchExternal(\"rowMoveCancelled\", this.moving.getComponent());\r\n\t\t\t}\r\n\r\n\t\t\tthis.moving = false;\r\n\t\t\tthis.toRow = false;\r\n\t\t\tthis.toRowAfter = false;\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", this.moveHover);\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", this.endMove);\r\n\r\n\t\t\tif(this.connection){\r\n\t\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-sending\");\r\n\t\t\t\tthis.disconnectFromTables();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tmoveRow(row, after){\r\n\t\tthis.toRow = row;\r\n\t\tthis.toRowAfter = after;\r\n\t}\r\n\r\n\tmoveHover(e){\r\n\t\tif(this.connection){\r\n\t\t\tthis.moveHoverConnections.call(this, e);\r\n\t\t}else{\r\n\t\t\tthis.moveHoverTable.call(this, e);\r\n\t\t}\r\n\t}\r\n\r\n\tmoveHoverTable(e){\r\n\t\tvar rowHolder = this.table.rowManager.getElement(),\r\n\t\tscrollTop = rowHolder.scrollTop,\r\n\t\tyPos = ((this.touchMove ? e.touches[0].pageY : e.pageY) - rowHolder.getBoundingClientRect().top) + scrollTop,\r\n\t\tscrollPos;\r\n\r\n\t\tthis.hoverElement.style.top = (yPos - this.startY) + \"px\";\r\n\t}\r\n\r\n\tmoveHoverConnections(e){\r\n\t\tthis.hoverElement.style.left = (this.startX + (this.touchMove ? e.touches[0].pageX : e.pageX)) + \"px\";\r\n\t\tthis.hoverElement.style.top = (this.startY + (this.touchMove ? e.touches[0].pageY : e.pageY)) + \"px\";\r\n\t}\r\n\r\n\telementRowDrop(e, element, row){\r\n\t\tthis.dispatchExternal(\"movableRowsElementDrop\", e, element, row ? row.getComponent() : false);\r\n\t}\r\n\r\n\t//establish connection with other tables\r\n\tconnectToTables(row){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStart\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"connect\", {\r\n\t\t\t\trow:row,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.connectionSelectorsElements){\r\n\r\n\t\t\tthis.connectionElements = [];\r\n\r\n\t\t\tif(!Array.isArray(this.connectionSelectorsElements)){\r\n\t\t\t\tthis.connectionSelectorsElements = [this.connectionSelectorsElements];\r\n\t\t\t}\r\n\r\n\t\t\tthis.connectionSelectorsElements.forEach((query) => {\r\n\t\t\t\tif(typeof query === \"string\"){\r\n\t\t\t\t\tthis.connectionElements = this.connectionElements.concat(Array.prototype.slice.call(document.querySelectorAll(query)));\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.connectionElements.push(query);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\t\tvar dropEvent = (e) => {\r\n\t\t\t\t\tthis.elementRowDrop(e, element, this.moving);\r\n\t\t\t\t};\r\n\r\n\t\t\t\telement.addEventListener(\"mouseup\", dropEvent);\r\n\t\t\t\telement.tabulatorElementDropEvent = dropEvent;\r\n\r\n\t\t\t\telement.classList.add(\"tabulator-movingrow-receiving\");\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t//disconnect from other tables\r\n\tdisconnectFromTables(){\r\n\t\tvar connectionTables;\r\n\r\n\t\tif(this.connectionSelectorsTables){\r\n\t\t\tconnectionTables = this.commsConnections(this.connectionSelectorsTables);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSendingStop\", connectionTables);\r\n\r\n\t\t\tthis.commsSend(this.connectionSelectorsTables, \"moveRow\", \"disconnect\");\r\n\t\t}\r\n\r\n\t\tthis.connectionElements.forEach((element) => {\r\n\t\t\telement.classList.remove(\"tabulator-movingrow-receiving\");\r\n\t\t\telement.removeEventListener(\"mouseup\", element.tabulatorElementDropEvent);\r\n\t\t\tdelete element.tabulatorElementDropEvent;\r\n\t\t});\r\n\t}\r\n\r\n\t//accept incomming connection\r\n\tconnect(table, row){\r\n\t\tif(!this.connectedTable){\r\n\t\t\tthis.connectedTable = table;\r\n\t\t\tthis.connectedRow = row;\r\n\r\n\t\t\tthis.table.element.classList.add(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) => {\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().addEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.tableRowDropEvent = this.tableRowDrop.bind(this);\r\n\r\n\t\t\tthis.table.element.addEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStart\", row, table);\r\n\r\n\t\t\treturn true;\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - Table cannot accept connection, already connected to table:\", this.connectedTable);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//close incomming connection\r\n\tdisconnect(table){\r\n\t\tif(table === this.connectedTable){\r\n\t\t\tthis.connectedTable = false;\r\n\t\t\tthis.connectedRow = false;\r\n\r\n\t\t\tthis.table.element.classList.remove(\"tabulator-movingrow-receiving\");\r\n\r\n\t\t\tthis.table.rowManager.getDisplayRows().forEach((row) =>{\r\n\t\t\t\tif(row.type === \"row\" && row.modules.moveRow && row.modules.moveRow.mouseup){\r\n\t\t\t\t\trow.getElement().removeEventListener(\"mouseup\", row.modules.moveRow.mouseup);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.table.element.removeEventListener(\"mouseup\", this.tableRowDropEvent);\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivingStop\", table);\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Move Row Error - trying to disconnect from non connected table\")\r\n\t\t}\r\n\t}\r\n\r\n\tdropComplete(table, row, success){\r\n\t\tvar sender = false;\r\n\r\n\t\tif(success){\r\n\r\n\t\t\tswitch(typeof this.table.options.movableRowsSender){\r\n\t\t\t\tcase \"string\":\r\n\t\t\t\tsender = this.senders[this.table.options.movableRowsSender];\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"function\":\r\n\t\t\t\tsender = this.table.options.movableRowsSender;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\r\n\t\t\tif(sender){\r\n\t\t\t\tsender.call(this, this.moving.getComponent(), row ? row.getComponent() : undefined, table)\r\n\t\t\t}else{\r\n\t\t\t\tif(this.table.options.movableRowsSender){\r\n\t\t\t\t\tconsole.warn(\"Mover Row Error - no matching sender found:\", this.table.options.movableRowsSender);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.dispatchExternal(\"movableRowsSent\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsSentFailed\", this.moving.getComponent(), row ? row.getComponent() : undefined, table);\r\n\t\t}\r\n\r\n\t\tthis.endMove();\r\n\t}\r\n\r\n\ttableRowDrop(e, row){\r\n\t\tvar receiver = false,\r\n\t\tsuccess = false;\r\n\r\n\t\te.stopImmediatePropagation();\r\n\r\n\t\tswitch(typeof this.table.options.movableRowsReceiver){\r\n\t\t\tcase \"string\":\r\n\t\t\treceiver = this.receivers[this.table.options.movableRowsReceiver];\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treceiver = this.table.options.movableRowsReceiver;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(receiver){\r\n\t\t\tsuccess = receiver.call(this, this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Mover Row Error - no matching receiver found:\", this.table.options.movableRowsReceiver)\r\n\t\t}\r\n\r\n\t\tif(success){\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceived\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}else{\r\n\t\t\tthis.dispatchExternal(\"movableRowsReceivedFailed\", this.connectedRow.getComponent(), row ? row.getComponent() : undefined, this.connectedTable);\r\n\t\t}\r\n\r\n\t\tthis.commsSend(this.connectedTable, \"moveRow\", \"dropcomplete\", {\r\n\t\t\trow:row,\r\n\t\t\tsuccess:success,\r\n\t\t});\r\n\t}\r\n\r\n\tcommsReceived(table, action, data){\r\n\t\tswitch(action){\r\n\t\t\tcase \"connect\":\r\n\t\t\treturn this.connect(table, data.row);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"disconnect\":\r\n\t\t\treturn this.disconnect(table);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"dropcomplete\":\r\n\t\t\treturn this.dropComplete(table, data.row, data.success);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n}\r\n\r\nMoveRows.prototype.receivers = {\r\n\tinsert:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\treturn true;\r\n\t},\r\n\r\n\tadd:function(fromRow, toRow, fromTable){\r\n\t\tthis.table.addRow(fromRow.getData());\r\n\t\treturn true;\r\n\t},\r\n\r\n\tupdate:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\ttoRow.update(fromRow.getData());\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n\r\n\treplace:function(fromRow, toRow, fromTable){\r\n\t\tif(toRow){\r\n\t\t\tthis.table.addRow(fromRow.getData(), undefined, toRow);\r\n\t\t\ttoRow.delete();\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\treturn false;\r\n\t},\r\n};\r\n\r\nMoveRows.prototype.senders = {\r\n\tdelete:function(fromRow, toRow, toTable){\r\n\t\tfromRow.delete();\r\n\t}\r\n};\r\n\r\nMoveRows.moduleName = \"moveRow\";\r\n\r\nexport default MoveRows;","import Module from '../../core/Module.js';\r\n\r\nimport defaultMutators from './defaults/mutators.js';\r\n\r\nclass Mutator extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.allowedTypes = [\"\", \"data\", \"edit\", \"clipboard\"]; //list of muatation types\r\n\t\tthis.enabled = true;\r\n\r\n\t\tthis.registerColumnOption(\"mutator\");\r\n\t\tthis.registerColumnOption(\"mutatorParams\");\r\n\t\tthis.registerColumnOption(\"mutatorData\");\r\n\t\tthis.registerColumnOption(\"mutatorDataParams\");\r\n\t\tthis.registerColumnOption(\"mutatorEdit\");\r\n\t\tthis.registerColumnOption(\"mutatorEditParams\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboard\");\r\n\t\tthis.registerColumnOption(\"mutatorClipboardParams\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-value-changing\", this.transformCell.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\tthis.subscribe(\"row-data-init-before\", this.rowDataChanged.bind(this));\r\n\t\tthis.subscribe(\"row-data-changing\", this.rowDataChanged.bind(this));\r\n\t}\r\n\r\n\trowDataChanged(row, tempData, updatedData){\r\n\t\treturn this.transformRow(tempData, \"data\", updatedData);\r\n\t}\r\n\r\n\t//initialize column mutator\r\n\tinitializeColumn(column){\r\n\t\tvar match = false,\r\n\t\tconfig = {};\r\n\r\n\t\tthis.allowedTypes.forEach((type) => {\r\n\t\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\t\tmutator;\r\n\r\n\t\t\tif(column.definition[key]){\r\n\t\t\t\tmutator = this.lookupMutator(column.definition[key]);\r\n\r\n\t\t\t\tif(mutator){\r\n\t\t\t\t\tmatch = true;\r\n\r\n\t\t\t\t\tconfig[key] = {\r\n\t\t\t\t\t\tmutator:mutator,\r\n\t\t\t\t\t\tparams: column.definition[key + \"Params\"] || {},\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tif(match){\r\n\t\t\tcolumn.modules.mutate = config;\r\n\t\t}\r\n\t}\r\n\r\n\tlookupMutator(value){\r\n\t\tvar mutator = false;\r\n\r\n\t\t//set column mutator\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Mutator.mutators[value]){\r\n\t\t\t\tmutator = Mutator.mutators[value];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Mutator Error - No such mutator found, ignoring: \", value);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tmutator = value;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn mutator;\r\n\t}\r\n\r\n\t//apply mutator to row\r\n\ttransformRow(data, type, updatedData){\r\n\t\tvar key = \"mutator\" + (type.charAt(0).toUpperCase() + type.slice(1)),\r\n\t\tvalue;\r\n\r\n\t\tif(this.enabled){\r\n\r\n\t\t\tthis.table.columnManager.traverse((column) => {\r\n\t\t\t\tvar mutator, params, component;\r\n\r\n\t\t\t\tif(column.modules.mutate){\r\n\t\t\t\t\tmutator = column.modules.mutate[key] || column.modules.mutate.mutator || false;\r\n\r\n\t\t\t\t\tif(mutator){\r\n\t\t\t\t\t\tvalue = column.getFieldValue(typeof updatedData !== \"undefined\" ? updatedData : data);\r\n\r\n\t\t\t\t\t\tif(type == \"data\" || typeof value !== \"undefined\"){\r\n\t\t\t\t\t\t\tcomponent = column.getComponent();\r\n\t\t\t\t\t\t\tparams = typeof mutator.params === \"function\" ? mutator.params(value, data, type, component) : mutator.params;\r\n\t\t\t\t\t\t\tcolumn.setFieldValue(data, mutator.mutator(value, data, type, params, component));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//apply mutator to new cell value\r\n\ttransformCell(cell, value){\r\n\t\tif(cell.column.modules.mutate){\r\n\t\t\tvar mutator = cell.column.modules.mutate.mutatorEdit || cell.column.modules.mutate.mutator || false,\r\n\t\t\ttempData = {};\r\n\r\n\t\t\tif(mutator){\r\n\t\t\t\ttempData = Object.assign(tempData, cell.row.getData());\r\n\t\t\t\tcell.column.setFieldValue(tempData, value);\r\n\t\t\t\treturn mutator.mutator(value, tempData, \"edit\", mutator.params, cell.getComponent());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn value;\r\n\t}\r\n\r\n\tenable(){\r\n\t\tthis.enabled = true;\r\n\t}\r\n\r\n\tdisable(){\r\n\t\tthis.enabled = false;\r\n\t}\r\n}\r\n\r\nMutator.moduleName = \"mutator\";\r\n\r\n//load defaults\r\nMutator.mutators = defaultMutators;\r\n\r\nexport default Mutator;","export default {};","import rows from './pageCounters/rows.js';\r\nimport pages from './pageCounters/pages.js';\r\n\r\n\r\nexport default {\r\n\trows:rows,\r\n\tpages:pages,\r\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\tvar el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tvalueEl.innerHTML = \" \" + currentRow + \"-\" + Math.min((currentRow + pageSize - 1), totalRows) + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\t\r\n\ttotalEl.innerHTML = \" \" + totalRows + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|rows\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tel.appendChild(showingEl);\r\n\tel.appendChild(valueEl);\r\n\tel.appendChild(ofEl);\r\n\tel.appendChild(totalEl);\r\n\tel.appendChild(rowsEl);\r\n\t\r\n\treturn el;\r\n};","export default function(pageSize, currentRow, currentPage, totalRows, totalPages){\r\n\r\n var el = document.createElement(\"span\"),\r\n\tshowingEl = document.createElement(\"span\"),\r\n\tvalueEl = document.createElement(\"span\"),\r\n\tofEl = document.createElement(\"span\"),\r\n\ttotalEl = document.createElement(\"span\"),\r\n\trowsEl = document.createElement(\"span\");\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|showing\", (value) => {\r\n\t\tshowingEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tvalueEl.innerHTML = \" \" + currentPage + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|of\", (value) => {\r\n\t\tofEl.innerHTML = value;\r\n\t});\r\n\t\r\n\ttotalEl.innerHTML = \" \" + totalPages + \" \";\r\n\t\r\n\tthis.table.modules.localize.langBind(\"pagination|counter|pages\", (value) => {\r\n\t\trowsEl.innerHTML = value;\r\n\t});\r\n\t\r\n\tel.appendChild(showingEl);\r\n\tel.appendChild(valueEl);\r\n\tel.appendChild(ofEl);\r\n\tel.appendChild(totalEl);\r\n\tel.appendChild(rowsEl);\r\n\t\r\n\treturn el;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultPageCounters from './defaults/pageCounters.js';\r\n\r\nclass Page extends Module{\r\n\t\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\t\t\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\t\t\r\n\t\tthis.element = null;\r\n\t\tthis.pageCounterElement = null;\r\n\t\tthis.pageCounter = null;\r\n\t\t\r\n\t\tthis.size = 0;\r\n\t\tthis.page = 1;\r\n\t\tthis.count = 5;\r\n\t\tthis.max = 1;\r\n\r\n\t\tthis.remoteRowCountEstimate = null;\r\n\t\t\r\n\t\tthis.displayIndex = 0; //index in display pipeline\r\n\t\t\r\n\t\tthis.initialLoad = true;\r\n\t\tthis.dataChanging = false; //flag to check if data is being changed by this module\r\n\t\t\r\n\t\tthis.pageSizes = [];\r\n\t\t\r\n\t\tthis.registerTableOption(\"pagination\", false); //set pagination type\r\n\t\tthis.registerTableOption(\"paginationMode\", \"local\"); //local or remote pagination\r\n\t\tthis.registerTableOption(\"paginationSize\", false); //set number of rows to a page\r\n\t\tthis.registerTableOption(\"paginationInitialPage\", 1); //initial page to show on load\r\n\t\tthis.registerTableOption(\"paginationCounter\", false); // set pagination counter\r\n\t\tthis.registerTableOption(\"paginationCounterElement\", false); // set pagination counter\r\n\t\tthis.registerTableOption(\"paginationButtonCount\", 5); // set count of page button\r\n\t\tthis.registerTableOption(\"paginationSizeSelector\", false); //add pagination size selector element\r\n\t\tthis.registerTableOption(\"paginationElement\", false); //element to hold pagination numbers\r\n\t\t// this.registerTableOption(\"paginationDataSent\", {}); //pagination data sent to the server\r\n\t\t// this.registerTableOption(\"paginationDataReceived\", {}); //pagination data received from the server\r\n\t\tthis.registerTableOption(\"paginationAddRow\", \"page\"); //add rows on table or page\r\n\t\t\r\n\t\tthis.registerTableOption(\"progressiveLoad\", false); //progressive loading\r\n\t\tthis.registerTableOption(\"progressiveLoadDelay\", 0); //delay between requests\r\n\t\tthis.registerTableOption(\"progressiveLoadScrollMargin\", 0); //margin before scroll begins\r\n\t\t\r\n\t\tthis.registerTableFunction(\"setMaxPage\", this.setMaxPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPage\", this.setPage.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageToRow\", this.userSetPageToRow.bind(this));\r\n\t\tthis.registerTableFunction(\"setPageSize\", this.userSetPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageSize\", this.getPageSize.bind(this));\r\n\t\tthis.registerTableFunction(\"previousPage\", this.previousPage.bind(this));\r\n\t\tthis.registerTableFunction(\"nextPage\", this.nextPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPage\", this.getPage.bind(this));\r\n\t\tthis.registerTableFunction(\"getPageMax\", this.getPageMax.bind(this));\r\n\t\t\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\t\r\n\tinitialize(){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.subscribe(\"row-deleted\", this.rowsUpdated.bind(this));\r\n\t\t\tthis.subscribe(\"row-adding-position\", this.rowAddingPosition.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\t\r\n\t\t\tif(this.table.options.paginationMode === \"remote\"){\r\n\t\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.table.options.progressiveLoad){\r\n\t\t\t\tconsole.error(\"Progressive Load Error - Pagination and progressive load cannot be used at the same time\");\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\t\t\t\r\n\t\t\tthis.createElements();\r\n\t\t\tthis.initializePageCounter();\r\n\t\t\tthis.initializePaginator();\r\n\t\t}else if(this.table.options.progressiveLoad){\r\n\t\t\tthis.subscribe(\"data-params\", this.remotePageParams.bind(this));\r\n\t\t\tthis.subscribe(\"data-loaded\", this._parseRemoteData.bind(this));\r\n\t\t\tthis.subscribe(\"table-built\", this.calculatePageSizes.bind(this));\r\n\t\t\tthis.subscribe(\"data-processed\", this.initialLoadComplete.bind(this));\r\n\t\t\t\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad)\r\n\t\t\t\r\n\t\t\tif(this.table.options.progressiveLoad === \"scroll\"){\r\n\t\t\t\tthis.subscribe(\"scroll-vertical\", this.scrollVertical.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trowAddingPosition(row, top){\r\n\t\tvar rowManager = this.table.rowManager,\r\n\t\tdispRows = rowManager.getDisplayRows(),\r\n\t\tindex;\r\n\t\t\r\n\t\tif(top){\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[0];\r\n\t\t\t}else{\r\n\t\t\t\tif(rowManager.activeRows.length){\r\n\t\t\t\t\tindex = rowManager.activeRows[rowManager.activeRows.length-1];\r\n\t\t\t\t\ttop = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tif(dispRows.length){\r\n\t\t\t\tindex = dispRows[dispRows.length - 1];\r\n\t\t\t\ttop = dispRows.length < this.size ? false : true;\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn {index, top}\r\n\t}\r\n\t\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\t\t\r\n\t\tif(this.table.options.paginationSize){\r\n\t\t\tthis.size = this.table.options.paginationSize;\r\n\t\t}else{\r\n\t\t\ttestElRow = document.createElement(\"div\");\r\n\t\t\ttestElRow.classList.add(\"tabulator-row\");\r\n\t\t\ttestElRow.style.visibility = \"hidden\";\r\n\t\t\t\r\n\t\t\ttestElCell = document.createElement(\"div\");\r\n\t\t\ttestElCell.classList.add(\"tabulator-cell\");\r\n\t\t\ttestElCell.innerHTML = \"Page Row Test\";\r\n\t\t\t\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\t\t\t\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\t\t\t\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\t\t\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\t\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\t\r\n\tremotePageParams(data, config, silent, params){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif((this.progressiveLoad && !silent) || (!this.progressiveLoad && !this.dataChanging)){\r\n\t\t\t\tthis.reset(true);\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\t\t\r\n\t\t//set page size if defined\r\n\t\tif(this.size){\r\n\t\t\tparams.size = this.size;\r\n\t\t}\r\n\t\t\r\n\t\treturn params;\r\n\t}\r\n\t\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\t\r\n\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\t\t\t\r\n\t\t\tif(row){\r\n\t\t\t\treturn this.setPageToRow(row)\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn Promise.reject();\r\n\t}\r\n\t\r\n\tuserSetPageSize(size){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\tthis.setPageSize(size);\r\n\t\t\treturn this.setPage(1);\r\n\t\t}else{\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\t\r\n\tscrollVertical(top, dir){\r\n\t\tvar element, diff, margin;\r\n\t\tif(!dir && !this.table.dataLoader.loading){\r\n\t\t\telement = this.table.rowManager.getElement();\r\n\t\t\tdiff = element.scrollHeight - element.clientHeight - top;\r\n\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (element.clientHeight * 2);\r\n\t\t\t\r\n\t\t\tif(diff < margin){\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t\t.catch(() => {}); //consume the exception thrown when on the last page\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\trestOnRenderBefore(rows, renderInPosition){\r\n\t\tif(!renderInPosition){\r\n\t\t\tif(this.mode === \"local\"){\r\n\t\t\t\tthis.reset();\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\treturn rows;\r\n\t}\r\n\t\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\t\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\t\t\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\t\t\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\t\t\r\n\t\tbutton = document.createElement(\"button\");\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\tbutton.setAttribute(\"aria-label\", \"\");\r\n\t\tbutton.setAttribute(\"title\", \"\");\r\n\t\t\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\t\t\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\t\t\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\t\t\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\t\t\r\n\t\tif(this.table.options.paginationSizeSelector){\r\n\t\t\tthis.pageSizeSelect = document.createElement(\"select\");\r\n\t\t\tthis.pageSizeSelect.classList.add(\"tabulator-page-size\");\r\n\t\t}\r\n\t}\r\n\t\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t\r\n\t\t\tif(Array.isArray(this.table.options.paginationSizeSelector)){\r\n\t\t\t\tpageSizes = this.table.options.paginationSizeSelector;\r\n\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes.unshift(this.size);\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\t\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\t\t\t\t\t\r\n\t\t\t\t\tfor (let i = 1; i < 5; i++){\r\n\t\t\t\t\t\tpageSizes.push(this.size * i);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.pageSizes = pageSizes;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tpageSizes = this.pageSizes;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\t\t\t\r\n\t\t\tpageSizes.forEach((item) => {\r\n\t\t\t\tvar itemEl = document.createElement(\"option\");\r\n\t\t\t\titemEl.value = item;\r\n\t\t\t\t\r\n\t\t\t\tif(item === true){\r\n\t\t\t\t\tthis.langBind(\"pagination|all\", function(value){\r\n\t\t\t\t\t\titemEl.innerHTML = value;\r\n\t\t\t\t\t});\r\n\t\t\t\t}else{\r\n\t\t\t\t\titemEl.innerHTML = item;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\t\r\n\tinitializePageCounter(){\r\n\t\tvar counter = this.table.options.paginationCounter,\r\n\t\tpageCounter = null;\r\n\t\t\r\n\t\tif(counter){\r\n\t\t\tif(typeof counter === \"function\"){\r\n\t\t\t\tpageCounter = counter;\r\n\t\t\t}else{\r\n\t\t\t\tpageCounter = Page.pageCounters[counter];\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(pageCounter){\r\n\t\t\t\tthis.pageCounter = pageCounter;\r\n\t\t\t\t\r\n\t\t\t\tthis.pageCounterElement = document.createElement(\"span\");\r\n\t\t\t\tthis.pageCounterElement.classList.add(\"tabulator-page-counter\");\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Pagination Error - No such page counter found: \", counter);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup pagination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel, paginationCounterHolder;\r\n\t\t\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\t\t\t\r\n\t\t\t//bind localizations\r\n\t\t\tthis.langBind(\"pagination|first\", (value) => {\r\n\t\t\t\tthis.firstBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|first_title\", (value) => {\r\n\t\t\t\tthis.firstBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.firstBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|prev\", (value) => {\r\n\t\t\t\tthis.prevBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|prev_title\", (value) => {\r\n\t\t\t\tthis.prevBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.prevBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|next\", (value) => {\r\n\t\t\t\tthis.nextBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|next_title\", (value) => {\r\n\t\t\t\tthis.nextBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.nextBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|last\", (value) => {\r\n\t\t\t\tthis.lastBut.innerHTML = value;\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.langBind(\"pagination|last_title\", (value) => {\r\n\t\t\t\tthis.lastBut.setAttribute(\"aria-label\", value);\r\n\t\t\t\tthis.lastBut.setAttribute(\"title\", value);\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\t//click bindings\r\n\t\t\tthis.firstBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(1)\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage()\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max)\r\n\t\t\t});\r\n\t\t\t\r\n\t\t\tif(this.table.options.paginationElement){\r\n\t\t\t\tthis.element = this.table.options.paginationElement;\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\t\t\t\t\r\n\t\t\t\tthis.langBind(\"pagination|page_size\", (value) => {\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"aria-label\", value);\r\n\t\t\t\t\tthis.pageSizeSelect.setAttribute(\"title\", value);\r\n\t\t\t\t\tpageSelectLabel.innerHTML = value;\r\n\t\t\t\t});\r\n\t\t\t\t\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\t\t\t\t\r\n\t\t\t\tthis.pageSizeSelect.addEventListener(\"change\", (e) => {\r\n\t\t\t\t\tthis.setPageSize(this.pageSizeSelect.value == \"true\" ? true : this.pageSizeSelect.value);\r\n\t\t\t\t\tthis.setPage(1)\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t//append to DOM\r\n\t\t\tthis.element.appendChild(this.firstBut);\r\n\t\t\tthis.element.appendChild(this.prevBut);\r\n\t\t\tthis.element.appendChild(this.pagesElement);\r\n\t\t\tthis.element.appendChild(this.nextBut);\r\n\t\t\tthis.element.appendChild(this.lastBut);\r\n\t\t\t\r\n\t\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\t\tif(this.table.options.paginationCounter){\r\n\r\n\t\t\t\t\tpaginationCounterHolder \r\n\r\n\t\t\t\t\tif(this.table.options.paginationCounterElement){\r\n\t\t\t\t\t\tif(this.table.options.paginationCounterElement instanceof HTMLElement){\r\n\t\t\t\t\t\t\tthis.table.options.paginationCounterElement.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t}else if(typeof this.table.options.paginationCounterElement === \"string\"){\r\n\t\t\t\t\t\t\tpaginationCounterHolder = document.querySelector(this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\tif(paginationCounterHolder){\r\n\t\t\t\t\t\t\t\tpaginationCounterHolder.appendChild(this.pageCounterElement);\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tconsole.warn(\"Pagination Error - Unable to find element matching paginationCounterElement selector:\", this.table.options.paginationCounterElement);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.footerManager.append(this.pageCounterElement);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tthis.page = this.table.options.paginationInitialPage;\r\n\t\t\tthis.count = this.table.options.paginationButtonCount;\r\n\t\t}\r\n\t\t\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\t\r\n\tinitializeProgressive(mode){\r\n\t\tthis.initializePaginator(true);\r\n\t\tthis.mode = \"progressive_\" + mode;\r\n\t\tthis.progressiveLoad = true;\r\n\t}\r\n\t\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\r\n\t}\r\n\t\r\n\tsetDisplayIndex(index){\r\n\t\tthis.displayIndex = index;\r\n\t}\r\n\t\r\n\tgetDisplayIndex(){\r\n\t\treturn this.displayIndex;\r\n\t}\r\n\t\r\n\t//calculate maximum page from number of rows\r\n\tsetMaxRows(rowCount){\r\n\t\tif(!rowCount){\r\n\t\t\tthis.max = 1;\r\n\t\t}else{\r\n\t\t\tthis.max = this.size === true ? 1 : Math.ceil(rowCount/this.size);\r\n\t\t}\r\n\t\t\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t}\r\n\t}\r\n\t\r\n\t//reset to first page without triggering action\r\n\treset(force){\r\n\t\tif(!this.initialLoad){\r\n\t\t\tif(this.mode == \"local\" || force){\r\n\t\t\t\tthis.page = 1;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set the maximum page\r\n\tsetMaxPage(max){\r\n\t\t\r\n\t\tmax = parseInt(max);\r\n\t\t\r\n\t\tthis.max = max || 1;\r\n\t\t\r\n\t\tif(this.page > this.max){\r\n\t\t\tthis.page = this.max;\r\n\t\t\tthis.trigger();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//set current page number\r\n\tsetPage(page){\r\n\t\tswitch(page){\r\n\t\t\tcase \"first\":\r\n\t\t\treturn this.setPage(1);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"last\":\r\n\t\t\treturn this.setPage(this.max);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t\t\r\n\t\tpage = parseInt(page);\r\n\t\t\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested page is out of range of 1 - \" + this.max + \":\", page);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetPageToRow(row){\r\n\t\tvar rows = this.table.rowManager.getDisplayRows(this.displayIndex - 1);\r\n\t\tvar index = rows.indexOf(row);\r\n\t\t\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\t\t\t\r\n\t\t\treturn this.setPage(page)\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Requested row is not visible\");\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\t\t\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.pageSizeSelect){\r\n\t\t\t// this.pageSizeSelect.value = size;\r\n\t\t\tthis.generatePageSizeSelectList();\r\n\t\t}\r\n\t\t\r\n\t\tthis.trackChanges();\r\n\t}\r\n\t\r\n\t_setPageCounter(totalRows){\r\n\t\tvar content, currentRow;\r\n\t\t\r\n\t\tif(this.pageCounter){\r\n\t\t\tcurrentRow = ((this.page - 1) * this.size) + 1;\r\n\r\n\t\t\tif(this.mode === \"remote\"){\r\n\t\t\t\ttotalRows = this.remoteRowCountEstimate;\r\n\t\t\t}\r\n\r\n\t\t\tcontent = this.pageCounter.call(this, this.size, currentRow, this.page, totalRows, this.max);\r\n\t\t\t\r\n\t\t\tswitch(typeof content){\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\tif(content instanceof Node){\r\n\t\t\t\t\t\r\n\t\t\t\t\t//clear previous cell contents\r\n\t\t\t\t\twhile(this.pageCounterElement.firstChild) this.pageCounterElement.removeChild(this.pageCounterElement.firstChild);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.pageCounterElement.appendChild(content);\r\n\t\t\t\t}else{\r\n\t\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(content != null){\r\n\t\t\t\t\t\tconsole.warn(\"Page Counter Error - Page Counter has returned a type of object, the only valid page counter object return is an instance of Node, the page counter returned:\", content);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\tbreak;\r\n\t\t\t\tcase \"undefined\":\r\n\t\t\t\tcase \"null\":\r\n\t\t\t\tthis.pageCounterElement.innerHTML = \"\";\r\n\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\tthis.pageCounterElement.innerHTML = content;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\t\r\n\t//setup the pagination buttons\r\n\t_setPageButtons(){\r\n\t\tlet leftSize = Math.floor((this.count-1) / 2);\r\n\t\tlet rightSize = Math.ceil((this.count-1) / 2);\r\n\t\tlet min = this.max - this.page + leftSize + 1 < this.count ? this.max-this.count+1: Math.max(this.page-leftSize,1);\r\n\t\tlet max = this.page <= rightSize? Math.min(this.count, this.max) :Math.min(this.page+rightSize, this.max);\r\n\t\t\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\t\t\r\n\t\tif(this.page == 1){\r\n\t\t\tthis.firstBut.disabled = true;\r\n\t\t\tthis.prevBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.firstBut.disabled = false;\r\n\t\t\tthis.prevBut.disabled = false;\r\n\t\t}\r\n\t\t\r\n\t\tif(this.page == this.max){\r\n\t\t\tthis.lastBut.disabled = true;\r\n\t\t\tthis.nextBut.disabled = true;\r\n\t\t}else{\r\n\t\t\tthis.lastBut.disabled = false;\r\n\t\t\tthis.nextBut.disabled = false;\r\n\t\t}\r\n\t\t\r\n\t\tfor(let i = min; i <= max; i++){\r\n\t\t\tif(i>0 && i <= this.max){\r\n\t\t\t\tthis.pagesElement.appendChild(this._generatePageButton(i));\r\n\t\t\t}\r\n\t\t}\r\n\t\t\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\t\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\t\t\r\n\t\tbutton.classList.add(\"tabulator-page\");\r\n\t\tif(page == this.page){\r\n\t\t\tbutton.classList.add(\"active\");\r\n\t\t}\r\n\t\t\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\t\t\r\n\t\tthis.langBind(\"pagination|page_title\", (value) => {\r\n\t\t\tbutton.setAttribute(\"aria-label\", value + \" \" + page);\r\n\t\t\tbutton.setAttribute(\"title\", value + \" \" + page);\r\n\t\t});\r\n\t\t\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\t\t\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page)\r\n\t\t});\r\n\t\t\r\n\t\treturn button;\r\n\t}\r\n\t\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger()\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Pagination Error - Previous page would be less than page 1:\", 0);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\t\t\t\r\n\t\t\tthis.trackChanges();\r\n\t\t\t\r\n\t\t\treturn this.trigger();\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tif(!this.progressiveLoad){\r\n\t\t\t\tconsole.warn(\"Pagination Error - Next page would be greater than maximum page of \" + this.max + \":\", this.max + 1);\r\n\t\t\t}\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\t\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\t\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\t\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\t\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\t\t\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\t\t\t\r\n\t\t\tthis.setMaxRows(data.length);\r\n\t\t\t\r\n\t\t\tif(this.size === true){\r\n\t\t\t\tstart = 0;\r\n\t\t\t\tend = data.length;\r\n\t\t\t}else{\r\n\t\t\t\tstart = this.size * (this.page - 1);\r\n\t\t\t\tend = start + parseInt(this.size);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\tthis._setPageButtons();\r\n\t\t\t\r\n\t\t\tfor(let i = start; i < end; i++){\r\n\t\t\t\tif(data[i]){\r\n\t\t\t\t\toutput.push(data[i]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis._setPageCounter(data.length);\r\n\t\t\t\r\n\t\t\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\t\t\tthis._setPageCounter(data.length);\r\n\t\t\t\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\t\r\n\ttrigger(){\r\n\t\tvar left;\r\n\t\t\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\t\t\t\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"remote\":\r\n\t\t\tthis.dataChanging = true;\r\n\t\t\treturn this.reloadData(null)\r\n\t\t\t.finally(() => {\r\n\t\t\t\tthis.dataChanging = false;\r\n\t\t\t})\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tcase \"progressive_load\":\r\n\t\t\tcase \"progressive_scroll\":\r\n\t\t\treturn this.reloadData(null, true);\r\n\t\t\tbreak;\r\n\t\t\t\r\n\t\t\tdefault:\r\n\t\t\tconsole.warn(\"Pagination Error - no such pagination mode:\", this.mode);\r\n\t\t\treturn Promise.reject();\r\n\t\t}\r\n\t}\r\n\t\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\t\t\r\n\t\tif(typeof data.last_page === \"undefined\"){\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").last_page || \"last_page\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\r\n\t\t\tthis.remoteRowCountEstimate = typeof data.last_row !== \"undefined\" ? data.last_row : (data.last_page * this.size - (this.page == data.last_page ? (this.size - data.data.length) : 0));\r\n\t\t\t\r\n\t\t\tif(this.progressiveLoad){\r\n\t\t\t\tswitch(this.mode){\r\n\t\t\t\t\tcase \"progressive_load\":\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.page == 1){\r\n\t\t\t\t\t\tthis.table.rowManager.setData(data.data, false, this.page == 1)\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tthis.table.rowManager.addRows(data.data);\r\n\t\t\t\t\t}\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.page < this.max){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t}, this.table.options.progressiveLoadDelay);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t\t\r\n\t\t\t\t\tcase \"progressive_scroll\":\r\n\t\t\t\t\tdata = this.page === 1 ? data.data : this.table.rowManager.getData().concat(data.data);\r\n\t\t\t\t\t\r\n\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\t\t\t\t\t\r\n\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\t\t\t\t\t\r\n\t\t\t\t\tif(this.table.rowManager.element.scrollHeight <= (this.table.rowManager.element.clientHeight + margin)){\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tthis.nextPage();\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\treturn false;\r\n\t\t\t}else{\r\n\t\t\t\t// left = this.table.rowManager.scrollLeft;\r\n\t\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\t\t\t\t// this.table.rowManager.scrollHorizontal(left);\r\n\t\t\t\t// this.table.columnManager.scrollHorizontal(left);\r\n\t\t\t}\r\n\t\t\t\r\n\t\t}else{\r\n\t\t\tconsole.warn(\"Remote Pagination Error - Server response missing '\" + (this.options(\"dataReceiveParams\").data || \"data\") + \"' property\");\r\n\t\t}\r\n\t\t\r\n\t\treturn data.data;\r\n\t}\r\n\t\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\t\t\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\t\t\t\r\n\t\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nPage.moduleName = \"page\";\r\n\r\n//load defaults\r\nPage.pageCounters = defaultPageCounters;\r\n\r\nexport default Page;","// read peristence information from storage\r\nexport default {\r\n\tlocal:function(id, type){\r\n\t\tvar data = localStorage.getItem(id + \"-\" + type);\r\n\r\n\t\treturn data ? JSON.parse(data) : false;\r\n\t},\r\n\tcookie:function(id, type){\r\n\t\tvar cookie = document.cookie,\r\n\t\tkey = id + \"-\" + type,\r\n\t\tcookiePos = cookie.indexOf(key + \"=\"),\r\n\t\tend, data;\r\n\r\n\t\t//if cookie exists, decode and load column data into tabulator\r\n\t\tif(cookiePos > -1){\r\n\t\t\tcookie = cookie.substr(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.substr(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};","//write persistence information to storage\r\nexport default {\r\n\tlocal:function(id, type, data){\r\n\t\tlocalStorage.setItem(id + \"-\" + type, JSON.stringify(data));\r\n\t},\r\n\tcookie:function(id, type, data){\r\n\t\tvar expireDate = new Date();\r\n\r\n\t\texpireDate.setDate(expireDate.getDate() + 10000);\r\n\r\n\t\tdocument.cookie = id + \"-\" + type + \"=\" + JSON.stringify(data) + \"; expires=\" + expireDate.toUTCString();\r\n\t}\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultReaders from './defaults/readers.js';\r\nimport defaultWriters from './defaults/writers.js';\r\n\r\nclass Persistence extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"\";\r\n\t\tthis.id = \"\";\r\n\t\t// this.persistProps = [\"field\", \"width\", \"visible\"];\r\n\t\tthis.defWatcherBlock = false;\r\n\t\tthis.config = {};\r\n\t\tthis.readFunc = false;\r\n\t\tthis.writeFunc = false;\r\n\r\n\t\tthis.registerTableOption(\"persistence\", false);\r\n\t\tthis.registerTableOption(\"persistenceID\", \"\"); //key for persistent storage\r\n\t\tthis.registerTableOption(\"persistenceMode\", true); //mode for storing persistence information\r\n\t\tthis.registerTableOption(\"persistenceReaderFunc\", false); //function for handling persistence data reading\r\n\t\tthis.registerTableOption(\"persistenceWriterFunc\", false); //function for handling persistence data writing\r\n\t}\r\n\r\n\t// Test for whether localStorage is available for use.\r\n\tlocalStorageTest() {\r\n\t\tvar testKey = \"_tabulator_test\";\r\n\r\n\t\ttry {\r\n\t\t\twindow.localStorage.setItem( testKey, testKey);\r\n\t\t\twindow.localStorage.removeItem( testKey );\r\n\t\t\treturn true;\r\n\t\t} catch(e) {\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup parameters\r\n\tinitialize(){\r\n\t\tif(this.table.options.persistence){\r\n\t\t\t//determine persistent layout storage type\r\n\t\t\tvar mode = this.table.options.persistenceMode,\r\n\t\t\tid = this.table.options.persistenceID,\r\n\t\t\tretreivedData;\r\n\r\n\t\t\tthis.mode = mode !== true ? mode : (this.localStorageTest() ? \"local\" : \"cookie\");\r\n\r\n\t\t\tif(this.table.options.persistenceReaderFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceReaderFunc === \"function\"){\r\n\t\t\t\t\tthis.readFunc = this.table.options.persistenceReaderFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.readers[this.table.options.persistenceReaderFunc]){\r\n\t\t\t\t\t\tthis.readFunc = Persistence.readers[this.table.options.persistenceReaderFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.table.options.persistenceReaderFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.readers[this.mode]){\r\n\t\t\t\t\tthis.readFunc = Persistence.readers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Read Error - invalid reader set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.table.options.persistenceWriterFunc){\r\n\t\t\t\tif(typeof this.table.options.persistenceWriterFunc === \"function\"){\r\n\t\t\t\t\tthis.writeFunc = this.table.options.persistenceWriterFunc;\r\n\t\t\t\t}else{\r\n\t\t\t\t\tif(Persistence.writers[this.table.options.persistenceWriterFunc]){\r\n\t\t\t\t\t\tthis.writeFunc = Persistence.writers[this.table.options.persistenceWriterFunc];\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid reader set\", this.table.options.persistenceWriterFunc);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}else{\r\n\t\t\t\tif(Persistence.writers[this.mode]){\r\n\t\t\t\t\tthis.writeFunc = Persistence.writers[this.mode];\r\n\t\t\t\t}else{\r\n\t\t\t\t\tconsole.warn(\"Persistence Write Error - invalid writer set\", this.mode);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//set storage tag\r\n\t\t\tthis.id = \"tabulator-\" + (id || (this.table.element.getAttribute(\"id\") || \"\"));\r\n\r\n\t\t\tthis.config = {\r\n\t\t\t\tsort:this.table.options.persistence === true || this.table.options.persistence.sort,\r\n\t\t\t\tfilter:this.table.options.persistence === true || this.table.options.persistence.filter,\r\n\t\t\t\tgroup:this.table.options.persistence === true || this.table.options.persistence.group,\r\n\t\t\t\tpage:this.table.options.persistence === true || this.table.options.persistence.page,\r\n\t\t\t\tcolumns:this.table.options.persistence === true ? [\"title\", \"width\", \"visible\"] : this.table.options.persistence.columns,\r\n\t\t\t};\r\n\r\n\t\t\t//load pagination data if needed\r\n\t\t\tif(this.config.page){\r\n\t\t\t\tretreivedData = this.retreiveData(\"page\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.paginationSize !== \"undefined\" && (this.config.page === true || this.config.page.size)){\r\n\t\t\t\t\t\tthis.table.options.paginationSize = retreivedData.paginationSize;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(typeof retreivedData.paginationInitialPage !== \"undefined\" && (this.config.page === true || this.config.page.page)){\r\n\t\t\t\t\t\tthis.table.options.paginationInitialPage = retreivedData.paginationInitialPage;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\t//load group data if needed\r\n\t\t\tif(this.config.group){\r\n\t\t\t\tretreivedData = this.retreiveData(\"group\");\r\n\r\n\t\t\t\tif(retreivedData){\r\n\t\t\t\t\tif(typeof retreivedData.groupBy !== \"undefined\" && (this.config.group === true || this.config.group.groupBy)){\r\n\t\t\t\t\t\tthis.table.options.groupBy = retreivedData.groupBy;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupStartOpen !== \"undefined\" && (this.config.group === true || this.config.group.groupStartOpen)){\r\n\t\t\t\t\t\tthis.table.options.groupStartOpen = retreivedData.groupStartOpen;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif(typeof retreivedData.groupHeader !== \"undefined\" && (this.config.group === true || this.config.group.groupHeader)){\r\n\t\t\t\t\t\tthis.table.options.groupHeader = retreivedData.groupHeader;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.columns){\r\n\t\t\t\tthis.table.options.columns = this.load(\"columns\", this.table.options.columns);\r\n\t\t\t\tthis.subscribe(\"column-init\", this.initializeColumn.bind(this));\r\n\t\t\t\tthis.subscribe(\"column-show\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-hide\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"column-moved\", this.save.bind(this, \"columns\"));\r\n\t\t\t\tthis.subscribe(\"table-built\", this.tableBuilt.bind(this), 0);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-redraw\", this.tableRedraw.bind(this));\r\n\r\n\r\n\t\t\tthis.subscribe(\"filter-changed\", this.eventSave.bind(this, \"filter\"));\r\n\t\t\tthis.subscribe(\"sort-changed\", this.eventSave.bind(this, \"sort\"));\r\n\t\t\tthis.subscribe(\"group-changed\", this.eventSave.bind(this, \"group\"));\r\n\t\t\tthis.subscribe(\"page-changed\", this.eventSave.bind(this, \"page\"));\r\n\t\t\tthis.subscribe(\"column-resized\", this.eventSave.bind(this, \"columns\"));\r\n\t\t\tthis.subscribe(\"layout-refreshed\", this.eventSave.bind(this, \"columns\"));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"getColumnLayout\", this.getColumnLayout.bind(this));\r\n\t\tthis.registerTableFunction(\"setColumnLayout\", this.setColumnLayout.bind(this));\r\n\t}\r\n\r\n\teventSave(type){\r\n\t\tif(this.config[type]){\r\n\t\t\tthis.save(type);\r\n\t\t}\r\n\t}\r\n\r\n\ttableBuilt(){\r\n\t\tvar options = this.table.options,\r\n\t\tsorters, filters;\r\n\r\n\t\tif(this.config.sort){\r\n\t\t\tsorters = this.load(\"sort\");\r\n\r\n\t\t\tif(!sorters === false){\r\n\t\t\t\tthis.table.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.initialFilter = filters;\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif(force && this.config.columns){\r\n\t\t\tthis.save(\"columns\");\r\n\t\t}\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tgetColumnLayout(){\r\n\t\treturn this.parseColumns(this.table.columnManager.getColumns());\r\n\t}\r\n\r\n\tsetColumnLayout(layout){\r\n\t\tthis.table.columnManager.setColumns(this.mergeDefinition(this.table.options.columns, layout))\r\n\t\treturn true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumn(column){\r\n\t\tvar def, keys;\r\n\r\n\t\tif(this.config.columns){\r\n\t\t\tthis.defWatcherBlock = true;\r\n\r\n\t\t\tdef = column.getDefinition();\r\n\r\n\t\t\tkeys = this.config.columns === true ? Object.keys(def) : this.config.columns;\r\n\r\n\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\tvar props = Object.getOwnPropertyDescriptor(def, key);\r\n\t\t\t\tvar value = def[key];\r\n\t\t\t\tif(props){\r\n\t\t\t\t\tObject.defineProperty(def, key, {\r\n\t\t\t\t\t\tset: function(newValue){\r\n\t\t\t\t\t\t\tvalue = newValue;\r\n\r\n\t\t\t\t\t\t\tif(!this.defWatcherBlock){\r\n\t\t\t\t\t\t\t\tthis.save(\"columns\");\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tif(props.set){\r\n\t\t\t\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tget:function(){\r\n\t\t\t\t\t\t\tif(props.get){\r\n\t\t\t\t\t\t\t\tprops.get();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\treturn value;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\tthis.defWatcherBlock = false;\r\n\t\t}\r\n\t}\r\n\r\n\t//load saved definitions\r\n\tload(type, current){\r\n\t\tvar data = this.retreiveData(type);\r\n\r\n\t\tif(current){\r\n\t\t\tdata = data ? this.mergeDefinition(current, data) : current;\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//retreive data from memory\r\n\tretreiveData(type){\r\n\t\treturn this.readFunc ? this.readFunc(this.id, type) : false;\r\n\t}\r\n\r\n\t//merge old and new column definitions\r\n\tmergeDefinition(oldCols, newCols){\r\n\t\tvar output = [];\r\n\r\n\t\tnewCols = newCols || [];\r\n\r\n\t\tnewCols.forEach((column, to) => {\r\n\t\t\tvar from = this._findColumn(oldCols, column),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(from){\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(from);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tif(key !== \"columns\" && typeof column[key] !== \"undefined\"){\r\n\t\t\t\t\t\tfrom[key] = column[key];\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tif(from.columns){\r\n\t\t\t\t\tfrom.columns = this.mergeDefinition(from.columns, column.columns);\r\n\t\t\t\t}\r\n\r\n\t\t\t\toutput.push(from);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\toldCols.forEach((column, i) => {\r\n\t\t\tvar from = this._findColumn(newCols, column);\r\n\r\n\t\t\tif (!from) {\r\n\t\t\t\tif(output.length>i){\r\n\t\t\t\t\toutput.splice(i, 0, column);\r\n\t\t\t\t}else{\r\n\t\t\t\t\toutput.push(column);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\t//find matching columns\r\n\t_findColumn(columns, subject){\r\n\t\tvar type = subject.columns ? \"group\" : (subject.field ? \"field\" : \"object\");\r\n\r\n\t\treturn columns.find(function(col){\r\n\t\t\tswitch(type){\r\n\t\t\t\tcase \"group\":\r\n\t\t\t\treturn col.title === subject.title && col.columns.length === subject.columns.length;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"field\":\r\n\t\t\t\treturn col.field === subject.field;\r\n\t\t\t\tbreak;\r\n\r\n\t\t\t\tcase \"object\":\r\n\t\t\t\treturn col === subject;\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//save data\r\n\tsave(type){\r\n\t\tvar data = {};\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"columns\":\r\n\t\t\tdata = this.parseColumns(this.table.columnManager.getColumns())\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"filter\":\r\n\t\t\tdata = this.table.modules.filter.getFilters();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sort\":\r\n\t\t\tdata = this.validateSorters(this.table.modules.sort.getSort());\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"group\":\r\n\t\t\tdata = this.getGroupConfig();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"page\":\r\n\t\t\tdata = this.getPageConfig();\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tif(this.writeFunc){\r\n\t\t\tthis.writeFunc(this.id, type, data);\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t//ensure sorters contain no function data\r\n\tvalidateSorters(data){\r\n\t\tdata.forEach(function(item){\r\n\t\t\titem.column = item.field;\r\n\t\t\tdelete item.field;\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetGroupConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.group){\r\n\t\t\tif(this.config.group === true || this.config.group.groupBy){\r\n\t\t\t\tdata.groupBy = this.table.options.groupBy;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupStartOpen){\r\n\t\t\t\tdata.groupStartOpen = this.table.options.groupStartOpen;\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.group === true || this.config.group.groupHeader){\r\n\t\t\t\tdata.groupHeader = this.table.options.groupHeader;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetPageConfig(){\r\n\t\tvar data = {};\r\n\r\n\t\tif(this.config.page){\r\n\t\t\tif(this.config.page === true || this.config.page.size){\r\n\t\t\t\tdata.paginationSize = this.table.modules.page.getPageSize();\r\n\t\t\t}\r\n\r\n\t\t\tif(this.config.page === true || this.config.page.page){\r\n\t\t\t\tdata.paginationInitialPage = this.table.modules.page.getPage();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\r\n\t//parse columns for data to store\r\n\tparseColumns(columns){\r\n\t\tvar definitions = [],\r\n\t\texcludedKeys = [\"headerContextMenu\", \"headerMenu\", \"contextMenu\", \"clickMenu\"];\r\n\r\n\t\tcolumns.forEach((column) => {\r\n\t\t\tvar defStore = {},\r\n\t\t\tcolDef = column.getDefinition(),\r\n\t\t\tkeys;\r\n\r\n\t\t\tif(column.isGroup){\r\n\t\t\t\tdefStore.title = colDef.title;\r\n\t\t\t\tdefStore.columns = this.parseColumns(column.getColumns());\r\n\t\t\t}else{\r\n\t\t\t\tdefStore.field = column.getField();\r\n\r\n\t\t\t\tif(this.config.columns === true || this.config.columns == undefined){\r\n\t\t\t\t\tkeys = Object.keys(colDef);\r\n\t\t\t\t\tkeys.push(\"width\");\r\n\t\t\t\t}else{\r\n\t\t\t\t\tkeys = this.config.columns;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tkeys.forEach((key)=>{\r\n\t\t\t\t\tswitch(key){\r\n\t\t\t\t\t\tcase \"width\":\r\n\t\t\t\t\t\tdefStore.width = column.getWidth();\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\tcase \"visible\":\r\n\t\t\t\t\t\tdefStore.visible = column.visible;\r\n\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\tif(typeof colDef[key] !== \"function\" && excludedKeys.indexOf(key) === -1){\r\n\t\t\t\t\t\t\tdefStore[key] = colDef[key];\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tdefinitions.push(defStore);\r\n\t\t});\r\n\r\n\t\treturn definitions;\r\n\t}\r\n}\r\n\r\nPersistence.moduleName = \"persistence\";\r\n\r\n//load defaults\r\nPersistence.readers = defaultReaders;\r\nPersistence.writers = defaultWriters;\r\n\r\nexport default Persistence;","import Module from '../../core/Module.js';\r\n\r\nclass Print extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.element = false;\r\n\t\tthis.manualBlock = false;\r\n\r\n\t\tthis.registerTableOption(\"printAsHtml\", false); //enable print as html\r\n\t\tthis.registerTableOption(\"printFormatter\", false); //printing page formatter\r\n\t\tthis.registerTableOption(\"printHeader\", false); //page header contents\r\n\t\tthis.registerTableOption(\"printFooter\", false); //page footer contents\r\n\t\tthis.registerTableOption(\"printStyled\", true); //enable print as html styling\r\n\t\tthis.registerTableOption(\"printRowRange\", \"visible\"); //restrict print to visible rows only\r\n\t\tthis.registerTableOption(\"printConfig\", {}); //print config options\r\n\r\n\t\tthis.registerColumnOption(\"print\");\r\n\t\tthis.registerColumnOption(\"titlePrint\");\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.printAsHtml){\r\n\t\t\twindow.addEventListener(\"beforeprint\", this.replaceTable.bind(this));\r\n\t\t\twindow.addEventListener(\"afterprint\", this.cleanup.bind(this));\r\n\t\t}\r\n\r\n\t\tthis.registerTableFunction(\"print\", this.printFullscreen.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\treplaceTable(){\r\n\t\tif(!this.manualBlock){\r\n\t\t\tthis.element = document.createElement(\"div\");\r\n\t\t\tthis.element.classList.add(\"tabulator-print-table\");\r\n\r\n\t\t\tthis.element.appendChild(this.table.modules.export.genereateTable(this.table.options.printConfig, this.table.options.printStyled, this.table.options.printRowRange, \"print\"));\r\n\r\n\t\t\tthis.table.element.style.display = \"none\";\r\n\r\n\t\t\tthis.table.element.parentNode.insertBefore(this.element, this.table.element);\r\n\t\t}\r\n\t}\r\n\r\n\tcleanup(){\r\n\t\tdocument.body.classList.remove(\"tabulator-print-fullscreen-hide\");\r\n\r\n\t\tif(this.element && this.element.parentNode){\r\n\t\t\tthis.element.parentNode.removeChild(this.element);\r\n\t\t\tthis.table.element.style.display = \"\";\r\n\t\t}\r\n\t}\r\n\r\n\tprintFullscreen(visible, style, config){\r\n\t\tvar scrollX = window.scrollX,\r\n\t\tscrollY = window.scrollY,\r\n\t\theaderEl = document.createElement(\"div\"),\r\n\t\tfooterEl = document.createElement(\"div\"),\r\n\t\ttableEl = this.table.modules.export.genereateTable(typeof config != \"undefined\" ? config : this.table.options.printConfig, typeof style != \"undefined\" ? style : this.table.options.printStyled, visible || this.table.options.printRowRange, \"print\"),\r\n\t\theaderContent, footerContent;\r\n\r\n\t\tthis.manualBlock = true;\r\n\r\n\t\tthis.element = document.createElement(\"div\");\r\n\t\tthis.element.classList.add(\"tabulator-print-fullscreen\");\r\n\r\n\t\tif(this.table.options.printHeader){\r\n\t\t\theaderEl.classList.add(\"tabulator-print-header\");\r\n\r\n\t\t\theaderContent = typeof this.table.options.printHeader == \"function\" ? this.table.options.printHeader.call(this.table) : this.table.options.printHeader;\r\n\r\n\t\t\tif(typeof headerContent == \"string\"){\r\n\t\t\t\theaderEl.innerHTML = headerContent;\r\n\t\t\t}else{\r\n\t\t\t\theaderEl.appendChild(headerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(headerEl);\r\n\t\t}\r\n\r\n\t\tthis.element.appendChild(tableEl);\r\n\r\n\t\tif(this.table.options.printFooter){\r\n\t\t\tfooterEl.classList.add(\"tabulator-print-footer\");\r\n\r\n\t\t\tfooterContent = typeof this.table.options.printFooter == \"function\" ? this.table.options.printFooter.call(this.table) : this.table.options.printFooter;\r\n\r\n\r\n\t\t\tif(typeof footerContent == \"string\"){\r\n\t\t\t\tfooterEl.innerHTML = footerContent;\r\n\t\t\t}else{\r\n\t\t\t\tfooterEl.appendChild(footerContent);\r\n\t\t\t}\r\n\r\n\t\t\tthis.element.appendChild(footerEl);\r\n\t\t}\r\n\r\n\t\tdocument.body.classList.add(\"tabulator-print-fullscreen-hide\");\r\n\t\tdocument.body.appendChild(this.element);\r\n\r\n\t\tif(this.table.options.printFormatter){\r\n\t\t\tthis.table.options.printFormatter(this.element, tableEl);\r\n\t\t}\r\n\r\n\t\twindow.print();\r\n\r\n\t\tthis.cleanup();\r\n\r\n\t\twindow.scrollTo(scrollX, scrollY);\r\n\r\n\t\tthis.manualBlock = false;\r\n\t}\r\n}\r\n\r\nPrint.moduleName = \"print\";\r\n\r\nexport default Print;","import Module from '../../core/Module.js';\r\n\r\nclass ReactiveData extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.data = false;\r\n\t\tthis.blocked = false; //block reactivity while performing update\r\n\t\tthis.origFuncs = {}; // hold original data array functions to allow replacement after data is done with\r\n\t\tthis.currentVersion = 0;\r\n\r\n\t\tthis.registerTableOption(\"reactiveData\", false); //enable data reactivity\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.reactiveData){\r\n\t\t\tthis.subscribe(\"cell-value-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"cell-value-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-before\", this.block.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-save-after\", this.unblock.bind(this));\r\n\t\t\tthis.subscribe(\"row-data-init-after\", this.watchRow.bind(this));\r\n\t\t\tthis.subscribe(\"data-processing\", this.watchData.bind(this));\r\n\t\t\tthis.subscribe(\"table-destroy\", this.unwatchData.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\twatchData(data){\r\n\t\tvar self = this,\r\n\t\tpushFunc, version;\r\n\r\n\t\tthis.currentVersion ++;\r\n\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tthis.unwatchData();\r\n\r\n\t\tthis.data = data;\r\n\r\n\t\t//override array push function\r\n\t\tthis.origFuncs.push = data.push;\r\n\r\n\t\tObject.defineProperty(this.data, \"push\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach((arg) => {\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, false);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.push.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array unshift function\r\n\t\tthis.origFuncs.unshift = data.unshift;\r\n\r\n\t\tObject.defineProperty(this.data, \"unshift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments);\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\targs.forEach((arg) => {\r\n\t\t\t\t\t\tself.table.rowManager.addRowActual(arg, true);\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.unshift.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array shift function\r\n\t\tthis.origFuncs.shift = data.shift;\r\n\r\n\t\tObject.defineProperty(this.data, \"shift\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar row;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[0]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.shift.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t//override array pop function\r\n\t\tthis.origFuncs.pop = data.pop;\r\n\r\n\t\tObject.defineProperty(this.data, \"pop\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar row;\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\t\t\t\t\tif(self.data.length){\r\n\t\t\t\t\t\trow = self.table.rowManager.getRowFromDataObject(self.data[self.data.length - 1]);\r\n\r\n\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\trow.deleteActual();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\treturn self.origFuncs.pop.call(data);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\r\n\t\t//override array splice function\r\n\t\tthis.origFuncs.splice = data.splice;\r\n\r\n\t\tObject.defineProperty(this.data, \"splice\", {\r\n\t\t\tenumerable: false,\r\n\t\t\tconfigurable: true,\r\n\t\t\tvalue: function(){\r\n\t\t\t\tvar args = Array.from(arguments),\r\n\t\t\t\tstart = args[0] < 0 ? data.length + args[0] : args[0],\r\n\t\t\t\tend = args[1],\r\n\t\t\t\tnewRows = args[2] ? args.slice(2) : false,\r\n\t\t\t\tstartRow;\r\n\r\n\t\t\t\tif(!self.blocked && version === self.currentVersion){\r\n\r\n\t\t\t\t\t//add new rows\r\n\t\t\t\t\tif(newRows){\r\n\t\t\t\t\t\tstartRow = data[start] ? self.table.rowManager.getRowFromDataObject(data[start]) : false;\r\n\r\n\t\t\t\t\t\tif(startRow){\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, startRow, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRows = newRows.slice().reverse();\r\n\r\n\t\t\t\t\t\t\tnewRows.forEach((rowData) => {\r\n\t\t\t\t\t\t\t\tself.table.rowManager.addRowActual(rowData, true, false, true);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t//delete removed rows\r\n\t\t\t\t\tif(end !== 0){\r\n\t\t\t\t\t\tvar oldRows = data.slice(start, typeof args[1] === \"undefined\" ? args[1] : start + end);\r\n\r\n\t\t\t\t\t\toldRows.forEach((rowData, i) => {\r\n\t\t\t\t\t\t\tvar row = self.table.rowManager.getRowFromDataObject(rowData);\r\n\r\n\t\t\t\t\t\t\tif(row){\r\n\t\t\t\t\t\t\t\trow.deleteActual(i !== oldRows.length - 1);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif(newRows || end !== 0){\r\n\t\t\t\t\t\tself.table.rowManager.reRenderInPosition();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn self.origFuncs.splice.apply(data, arguments);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchData(){\r\n\t\tif(this.data !== false){\r\n\t\t\tfor(var key in this.origFuncs){\r\n\t\t\t\tObject.defineProperty(this.data, key, {\r\n\t\t\t\t\tenumerable: true,\r\n\t\t\t\t\tconfigurable:true,\r\n\t\t\t\t\twritable:true,\r\n\t\t\t\t\tvalue: this.origFuncs.key,\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\twatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tthis.blocked = true;\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tthis.watchKey(row, data, key);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.dataTree){\r\n\t\t\tthis.watchTreeChildren(row);\r\n\t\t}\r\n\r\n\t\tthis.blocked = false;\r\n\t}\r\n\r\n\twatchTreeChildren (row){\r\n\t\tvar childField = row.getData()[this.table.options.dataTreeChildField],\r\n\t\torigFuncs = {};\r\n\r\n\t\tfunction rebuildTree(){\r\n\t\t\tthis.table.modules.dataTree.initializeRow(row);\r\n\t\t\tthis.table.modules.dataTree.layoutRow(row);\r\n\t\t\tthis.table.rowManager.refreshActiveData(\"tree\", false, true);\r\n\t\t}\r\n\r\n\t\tif(childField){\r\n\r\n\t\t\torigFuncs.push = childField.push;\r\n\r\n\t\t\tObject.defineProperty(childField, \"push\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.push.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.unshift = childField.unshift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"unshift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.unshift.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.shift = childField.shift;\r\n\r\n\t\t\tObject.defineProperty(childField, \"shift\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.shift.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.pop = childField.pop;\r\n\r\n\t\t\tObject.defineProperty(childField, \"pop\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.pop.call(childField);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\torigFuncs.splice = childField.splice;\r\n\r\n\t\t\tObject.defineProperty(childField, \"splice\", {\r\n\t\t\t\tenumerable: false,\r\n\t\t\t\tconfigurable: true,\r\n\t\t\t\tvalue: () => {\r\n\t\t\t\t\tvar result = origFuncs.splice.apply(childField, arguments);\r\n\r\n\t\t\t\t\trebuildTree();\r\n\r\n\t\t\t\t\treturn result;\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\twatchKey(row, data, key){\r\n\t\tvar props = Object.getOwnPropertyDescriptor(data, key),\r\n\t\tvalue = data[key],\r\n\t\tversion = this.currentVersion;\r\n\r\n\t\tObject.defineProperty(data, key, {\r\n\t\t\tset: (newValue) => {\r\n\t\t\t\tvalue = newValue;\r\n\t\t\t\tif(!this.blocked && version === this.currentVersion){\r\n\t\t\t\t\tvar update = {};\r\n\t\t\t\t\tupdate[key] = newValue;\r\n\t\t\t\t\trow.updateData(update);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif(props.set){\r\n\t\t\t\t\tprops.set(newValue);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tget:() => {\r\n\r\n\t\t\t\tif(props.get){\r\n\t\t\t\t\tprops.get();\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn value;\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tunwatchRow(row){\r\n\t\tvar data = row.getData();\r\n\r\n\t\tfor(var key in data){\r\n\t\t\tObject.defineProperty(data, key, {\r\n\t\t\t\tvalue:data[key],\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\tblock(){\r\n\t\tthis.blocked = true;\r\n\t}\r\n\r\n\tunblock(){\r\n\t\tthis.blocked = false;\r\n\t}\r\n}\r\n\r\nReactiveData.moduleName = \"reactiveData\";\r\n\r\nexport default ReactiveData;\r\n\r\n\r\n\r\n","import Module from '../../core/Module.js';\r\n\r\nclass ResizeColumns extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startX = false;\r\n\t\tthis.startWidth = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerColumnOption(\"resizable\", true);\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\t// if(this.table.options.resizableColumns){\r\n\t\t\tthis.subscribe(\"cell-layout\", this.layoutCellHandles.bind(this));\r\n\t\t\tthis.subscribe(\"column-init\", this.layoutColumnHeader.bind(this));\r\n\t\t// }\r\n\t}\r\n\r\n\tlayoutCellHandles(cell){\r\n\t\tif(cell.row.type === \"row\"){\r\n\t\t\tthis.initializeColumn(\"cell\", cell.column, cell.element);\r\n\t\t}\r\n\t}\r\n\r\n\tlayoutColumnHeader(column){\r\n\t\tthis.initializeColumn(\"header\", column, column.element);\r\n\t}\r\n\r\n\tinitializeColumn(type, column, element){\r\n\t\tvar self = this,\r\n\t\tvariableHeight = false,\r\n\t\tmode = column.definition.resizable;\r\n\r\n\t\t//set column resize mode\r\n\t\tif(type === \"header\"){\r\n\t\t\tvariableHeight = column.definition.formatter == \"textarea\" || column.definition.variableHeight;\r\n\t\t\tcolumn.modules.resize = {variableHeight:variableHeight};\r\n\t\t}\r\n\r\n\t\tif(mode === true || mode == type){\r\n\r\n\t\t\tvar handle = document.createElement('div');\r\n\t\t\thandle.className = \"tabulator-col-resize-handle\";\r\n\r\n\r\n\t\t\tvar prevHandle = document.createElement('div');\r\n\t\t\tprevHandle.className = \"tabulator-col-resize-handle prev\";\r\n\r\n\t\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar handleDown = function(e){\r\n\t\t\t\tvar nearestColumn = column.getLastColumn();\r\n\r\n\t\t\t\tif(nearestColumn && self._checkResizability(nearestColumn)){\r\n\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\tself._mouseDown(e, nearestColumn, handle);\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\t\t//reszie column on double click\r\n\t\t\thandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar col = column.getLastColumn();\r\n\r\n\t\t\t\tif(col && self._checkResizability(col)){\r\n\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\tcol.reinitializeWidth(true);\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\r\n\t\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t});\r\n\r\n\t\t\tvar prevHandleDown = function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\tself.startColumn = column;\r\n\t\t\t\t\t\tself._mouseDown(e, prevColumn, prevHandle);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\tprevHandle.addEventListener(\"mousedown\", prevHandleDown);\r\n\t\t\tprevHandle.addEventListener(\"touchstart\", prevHandleDown, {passive: true});\r\n\r\n\t\t\t//resize column on double click\r\n\t\t\tprevHandle.addEventListener(\"dblclick\", function(e){\r\n\t\t\t\tvar nearestColumn, colIndex, prevColumn;\r\n\r\n\t\t\t\tnearestColumn = column.getFirstColumn();\r\n\r\n\t\t\t\tif(nearestColumn){\r\n\t\t\t\t\tcolIndex = self.table.columnManager.findColumnIndex(nearestColumn);\r\n\t\t\t\t\tprevColumn = colIndex > 0 ? self.table.columnManager.getColumnByIndex(colIndex - 1) : false;\r\n\r\n\t\t\t\t\tif(prevColumn && self._checkResizability(prevColumn)){\r\n\t\t\t\t\t\te.stopPropagation();\r\n\t\t\t\t\t\tprevColumn.reinitializeWidth(true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t});\r\n\r\n\t\t\telement.appendChild(handle);\r\n\t\t\telement.appendChild(prevHandle);\r\n\t\t}\r\n\t}\r\n\r\n\t_checkResizability(column){\r\n\t\treturn column.definition.resizable;\r\n\t}\r\n\r\n\t_mouseDown(e, column, 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\t// self.table.columnManager.tempScrollBlock();\r\n\r\n\t\t\tif(self.table.rtl){\r\n\t\t\t\tcolumn.setWidth(self.startWidth - ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}else{\r\n\t\t\t\tcolumn.setWidth(self.startWidth + ((typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX) - self.startX));\r\n\t\t\t}\r\n\r\n\t\t\tself.table.columnManager.renderer.rerenderColumns(true);\r\n\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\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\tif(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\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\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseUp);\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.dispatch(\"column-resized\", column);\r\n\t\t\tself.table.externalEvents.dispatch(\"columnResized\", column.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\tif(self.startColumn.modules.edit){\r\n\t\t\tself.startColumn.modules.edit.blocked = true;\r\n\t\t}\r\n\r\n\t\tself.startX = typeof e.screenX === \"undefined\" ? e.touches[0].screenX : e.screenX;\r\n\t\tself.startWidth = column.getWidth();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeColumns.moduleName = \"resizeColumns\";\r\n\r\nexport default ResizeColumns;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeRows extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.startColumn = false;\r\n\t\tthis.startY = false;\r\n\t\tthis.startHeight = false;\r\n\t\tthis.handle = null;\r\n\t\tthis.prevHandle = null;\r\n\r\n\t\tthis.registerTableOption(\"resizableRows\", false); //resizable rows\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.resizableRows){\r\n\t\t\tthis.subscribe(\"row-layout-after\", this.initializeRow.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\trowEl = row.getElement();\r\n\r\n\t\tvar handle = document.createElement('div');\r\n\t\thandle.className = \"tabulator-row-resize-handle\";\r\n\r\n\t\tvar prevHandle = document.createElement('div');\r\n\t\tprevHandle.className = \"tabulator-row-resize-handle prev\";\r\n\r\n\t\thandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar handleDown = function(e){\r\n\t\t\tself.startRow = row;\r\n\t\t\tself._mouseDown(e, row, handle);\r\n\t\t};\r\n\r\n\t\thandle.addEventListener(\"mousedown\", handleDown);\r\n\t\thandle.addEventListener(\"touchstart\", handleDown, {passive: true});\r\n\r\n\t\tprevHandle.addEventListener(\"click\", function(e){\r\n\t\t\te.stopPropagation();\r\n\t\t});\r\n\r\n\t\tvar prevHandleDown = function(e){\r\n\t\t\tvar prevRow = self.table.rowManager.prevDisplayRow(row);\r\n\r\n\t\t\tif(prevRow){\r\n\t\t\t\tself.startRow = prevRow;\r\n\t\t\t\tself._mouseDown(e, prevRow, prevHandle);\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tprevHandle.addEventListener(\"mousedown\",prevHandleDown);\r\n\t\tprevHandle.addEventListener(\"touchstart\",prevHandleDown, {passive: true});\r\n\r\n\t\trowEl.appendChild(handle);\r\n\t\trowEl.appendChild(prevHandle);\r\n\t}\r\n\r\n\t_mouseDown(e, row, handle){\r\n\t\tvar self = this;\r\n\r\n\t\tself.table.element.classList.add(\"tabulator-block-select\");\r\n\r\n\t\tfunction mouseMove(e){\r\n\t\t\trow.setHeight(self.startHeight + ((typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY) - self.startY));\r\n\t\t}\r\n\r\n\t\tfunction mouseUp(e){\r\n\r\n\t\t\t// //block editor from taking action while resizing is taking place\r\n\t\t\t// if(self.startColumn.modules.edit){\r\n\t\t\t// \tself.startColumn.modules.edit.blocked = false;\r\n\t\t\t// }\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", mouseMove);\r\n\t\t\tdocument.body.removeEventListener(\"mousemove\", mouseMove);\r\n\r\n\t\t\thandle.removeEventListener(\"touchmove\", mouseMove);\r\n\t\t\thandle.removeEventListener(\"touchend\", mouseUp);\r\n\r\n\t\t\tself.table.element.classList.remove(\"tabulator-block-select\");\r\n\r\n\t\t\tself.dispatchExternal(\"rowResized\", row.getComponent());\r\n\t\t}\r\n\r\n\t\te.stopPropagation(); //prevent resize from interfereing with movable columns\r\n\r\n\t\t//block editor from taking action while resizing is taking place\r\n\t\t// if(self.startColumn.modules.edit){\r\n\t\t// \tself.startColumn.modules.edit.blocked = true;\r\n\t\t// }\r\n\r\n\t\tself.startY = typeof e.screenY === \"undefined\" ? e.touches[0].screenY : e.screenY;\r\n\t\tself.startHeight = row.getHeight();\r\n\r\n\t\tdocument.body.addEventListener(\"mousemove\", mouseMove);\r\n\t\tdocument.body.addEventListener(\"mouseup\", mouseUp);\r\n\r\n\t\thandle.addEventListener(\"touchmove\", mouseMove, {passive: true});\r\n\t\thandle.addEventListener(\"touchend\", mouseUp);\r\n\t}\r\n}\r\n\r\nResizeRows.moduleName = \"resizeRows\";\r\n\r\nexport default ResizeRows;","import Module from '../../core/Module.js';\r\n\r\nclass ResizeTable extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.binding = false;\r\n\t\tthis.observer = false;\r\n\t\tthis.containerObserver = false;\r\n\r\n\t\tthis.tableHeight = 0;\r\n\t\tthis.tableWidth = 0;\r\n\t\tthis.containerHeight = 0;\r\n\t\tthis.containerWidth = 0;\r\n\r\n\t\tthis.autoResize = false;\r\n\r\n\t\tthis.registerTableOption(\"autoResize\", true); //auto resize table\r\n\t}\r\n\r\n\tinitialize(){\r\n\t\tif(this.table.options.autoResize){\r\n\t\t\tvar table = this.table,\r\n\t\t\ttableStyle;\r\n\r\n\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\r\n\t\t\tif(table.element.parentNode){\r\n\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t}\r\n\r\n\t\t\tif(typeof ResizeObserver !== \"undefined\" && table.rowManager.getRenderMode() === \"virtual\"){\r\n\r\n\t\t\t\tthis.autoResize = true;\r\n\r\n\t\t\t\tthis.observer = new ResizeObserver((entry) => {\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\tif(this.tableHeight != nodeHeight || this.tableWidth != nodeWidth){\r\n\t\t\t\t\t\t\tthis.tableHeight = nodeHeight;\r\n\t\t\t\t\t\t\tthis.tableWidth = nodeWidth;\r\n\r\n\t\t\t\t\t\t\tif(table.element.parentNode){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = table.element.parentNode.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = table.element.parentNode.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.table.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis.observer.observe(table.element);\r\n\r\n\t\t\t\ttableStyle = window.getComputedStyle(table.element);\r\n\r\n\t\t\t\tif(this.table.element.parentNode && !this.table.rowManager.fixedHeight && (tableStyle.getPropertyValue(\"max-height\") || tableStyle.getPropertyValue(\"min-height\"))){\r\n\r\n\t\t\t\t\tthis.containerObserver = new ResizeObserver((entry) => {\r\n\t\t\t\t\t\tif(!table.browserMobile || (table.browserMobile &&!table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\t\tvar nodeHeight = Math.floor(entry[0].contentRect.height);\r\n\t\t\t\t\t\t\tvar nodeWidth = Math.floor(entry[0].contentRect.width);\r\n\r\n\t\t\t\t\t\t\tif(this.containerHeight != nodeHeight || this.containerWidth != nodeWidth){\r\n\t\t\t\t\t\t\t\tthis.containerHeight = nodeHeight;\r\n\t\t\t\t\t\t\t\tthis.containerWidth = nodeWidth;\r\n\t\t\t\t\t\t\t\tthis.tableHeight = table.element.clientHeight;\r\n\t\t\t\t\t\t\t\tthis.tableWidth = table.element.clientWidth;\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tthis.containerObserver.observe(this.table.element.parentNode);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.subscribe(\"table-resize\", this.tableResized.bind(this));\r\n\r\n\t\t\t}else{\r\n\t\t\t\tthis.binding = function(){\r\n\t\t\t\t\tif(!table.browserMobile || (table.browserMobile && !table.modules.edit.currentCell)){\r\n\r\n\t\t\t\t\t\ttable.columnManager.renderer.rerenderColumns(true);\r\n\r\n\t\t\t\t\t\ttable.redraw();\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\twindow.addEventListener(\"resize\", this.binding);\r\n\t\t\t}\r\n\r\n\t\t\tthis.subscribe(\"table-destroy\", this.clearBindings.bind(this));\r\n\t\t}\r\n\t}\r\n\r\n\ttableResized(){\r\n\t\tthis.table.rowManager.redraw();\r\n\t}\r\n\r\n\tclearBindings(){\r\n\t\tif(this.binding){\r\n\t\t\twindow.removeEventListener(\"resize\", this.binding);\r\n\t\t}\r\n\r\n\t\tif(this.observer){\r\n\t\t\tthis.observer.unobserve(this.table.element);\r\n\t\t}\r\n\r\n\t\tif(this.containerObserver){\r\n\t\t\tthis.containerObserver.unobserve(this.table.element.parentNode);\r\n\t\t}\r\n\t}\r\n}\r\n\r\nResizeTable.moduleName = \"resizeTable\";\r\n\r\nexport default ResizeTable;","import Module from '../../core/Module.js';\r\n\r\nclass ResponsiveLayout extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.columns = [];\r\n\t\tthis.hiddenColumns = [];\r\n\t\tthis.mode = \"\";\r\n\t\tthis.index = 0;\r\n\t\tthis.collapseFormatter = [];\r\n\t\tthis.collapseStartOpen = true;\r\n\t\tthis.collapseHandleColumn = false;\r\n\r\n\t\tthis.registerTableOption(\"responsiveLayout\", false); //responsive layout flags\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseStartOpen\", true); //start showing collapsed data\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseUseFormatters\", true); //responsive layout collapse formatter\r\n\t\tthis.registerTableOption(\"responsiveLayoutCollapseFormatter\", false); //responsive layout collapse formatter\r\n\r\n\t\tthis.registerColumnOption(\"responsive\");\r\n\t}\r\n\r\n\t//generate responsive columns list\r\n\tinitialize(){\r\n\t\tvar self = this,\r\n\t\tcolumns = [];\r\n\r\n\t\tif(this.table.options.responsiveLayout){\r\n\t\t\tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t\t\tthis.subscribe(\"column-show\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"column-hide\", this.updateColumnVisibility.bind(this));\r\n\t\t\tthis.subscribe(\"columns-loaded\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-moved\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-add\", this.initializeResponsivity.bind(this));\r\n\t\t\tthis.subscribe(\"column-delete\", this.initializeResponsivity.bind(this));\r\n\r\n\t\t\tthis.subscribe(\"table-redrawing\", this.tableRedraw.bind(this));\r\n\r\n\t\t\tif(this.table.options.responsiveLayout === \"collapse\"){\r\n\t\t\t\tthis.subscribe(\"row-init\", this.initializeRow.bind(this));\r\n\t\t\t\tthis.subscribe(\"row-layout\", this.layoutRow.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\ttableRedraw(force){\r\n\t\tif([\"fitColumns\", \"fitDataStretch\"].indexOf(this.layoutMode()) === -1){\r\n\t\t\tif(!force){\r\n\t\t\t\tthis.update();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeResponsivity(){\r\n\t\tvar columns = [];\r\n\r\n\t\tthis.mode = this.table.options.responsiveLayout;\r\n\t\tthis.collapseFormatter = this.table.options.responsiveLayoutCollapseFormatter || this.formatCollapsedData;\r\n\t\tthis.collapseStartOpen = this.table.options.responsiveLayoutCollapseStartOpen;\r\n\t\tthis.hiddenColumns = [];\r\n\r\n\t\t//determine level of responsivity for each column\r\n\t\tthis.table.columnManager.columnsByIndex.forEach(function(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 && self.mode === \"collapse\"){\r\n\t\t\t\t\t\tself.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(function(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.innerText = 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\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\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\r\n\t\tthis.registerTableOption(\"selectable\", \"highlight\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRangeMode\", \"drag\"); //highlight rows on hover\r\n\t\tthis.registerTableOption(\"selectableRollingSelection\", true); //roll selection once maximum number of selectable rows is reached\r\n\t\tthis.registerTableOption(\"selectablePersistence\", true); // maintain selection when table view is updated\r\n\t\tthis.registerTableOption(\"selectableCheck\", function(data, row){return true;}); //check wheather row is selectable\r\n\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\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\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\r\n\t\t\tif(this.table.options.selectable && !this.table.options.selectablePersistence){\r\n\t\t\t\tthis.subscribe(\"data-refeshing\", this.deselectRows.bind(this));\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\trowRetrieve(type, prevValue){\r\n\t\treturn type === \"selected\" ? this.selectedRows : prevValue;\r\n\t}\r\n\r\n\trowDeleted(row){\r\n\t\tthis._deselectRow(row, true);\r\n\t}\r\n\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\r\n\t\tif(silent !== true){\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tvar self = this,\r\n\t\telement = row.getElement();\r\n\r\n\t\t// trigger end of row selection\r\n\t\tvar endSelect = function(){\r\n\r\n\t\t\tsetTimeout(function(){\r\n\t\t\t\tself.selecting = false;\r\n\t\t\t}, 50);\r\n\r\n\t\t\tdocument.body.removeEventListener(\"mouseup\", endSelect);\r\n\t\t};\r\n\r\n\t\trow.modules.select = {selected:false};\r\n\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\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\", 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\tself.lastClickedRow = self.lastClickedRow || row;\r\n\r\n\t\t\t\t\t\t\tvar lastClickedRowIdx = self.table.rowManager.getDisplayRowIndex(self.lastClickedRow);\r\n\t\t\t\t\t\t\tvar rowIdx = self.table.rowManager.getDisplayRowIndex(row);\r\n\r\n\t\t\t\t\t\t\tvar fromRowIdx = lastClickedRowIdx <= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\t\t\t\t\t\t\tvar toRowIdx = lastClickedRowIdx >= rowIdx ? lastClickedRowIdx : rowIdx;\r\n\r\n\t\t\t\t\t\t\tvar rows = self.table.rowManager.getDisplayRows().slice(0);\r\n\t\t\t\t\t\t\tvar toggledRows = rows.splice(fromRowIdx, toRowIdx - fromRowIdx + 1);\r\n\r\n\t\t\t\t\t\t\tif(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\t\ttoggledRows.forEach(function(toggledRow){\r\n\t\t\t\t\t\t\t\t\tif(toggledRow !== self.lastClickedRow){\r\n\r\n\t\t\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true && !self.isRowSelected(row)){\r\n\t\t\t\t\t\t\t\t\t\t\tif(self.selectedRows.length < self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\t\t\t\tself.toggleRow(toggledRow);\r\n\t\t\t\t\t\t\t\t\t\t}\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\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\r\n\t\t\t\t\t\t\t\tif(self.table.options.selectable !== true){\r\n\t\t\t\t\t\t\t\t\tif(toggledRows.length > self.table.options.selectable){\r\n\t\t\t\t\t\t\t\t\t\ttoggledRows = toggledRows.slice(0, self.table.options.selectable)\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\tself.selectRows(toggledRows);\r\n\t\t\t\t\t\t\t}\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\telse if(e.ctrlKey || e.metaKey){\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tself.deselectRows(undefined, true);\r\n\t\t\t\t\t\t\tself.selectRows(row);\r\n\t\t\t\t\t\t\tself.lastClickedRow = row;\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\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\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\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\r\n\t\t\t\t\t\t\tself.selecting = true;\r\n\r\n\t\t\t\t\t\t\tself.selectPrev = [];\r\n\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\r\n\t\t\t\t\t\t\tself.toggleRow(row);\r\n\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\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\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\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\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\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\r\n\t//select a number of rows\r\n\tselectRows(rows){\r\n\t\tvar rowMatch;\r\n\r\n\t\tswitch(typeof rows){\r\n\t\t\tcase \"undefined\":\r\n\t\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t});\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"string\":\r\n\r\n\t\t\trowMatch = this.table.rowManager.findRow(rows);\r\n\r\n\t\t\tif(rowMatch){\r\n\t\t\t\tthis._selectRow(rowMatch, true, true);\r\n\t\t\t}else{\r\n\t\t\t\tthis.table.rowManager.getRows(rows).forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\t\t\t}\r\n\r\n\t\t\tthis._rowSelectionChanged();\r\n\t\t\tbreak;\r\n\r\n\t\t\tdefault:\r\n\t\t\tif(Array.isArray(rows)){\r\n\t\t\t\trows.forEach((row) => {\r\n\t\t\t\t\tthis._selectRow(row, true, true);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tthis._rowSelectionChanged();\r\n\t\t\t}else{\r\n\t\t\t\tthis._selectRow(rows, false, true);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//select an individual row\r\n\t_selectRow(rowInfo, silent, force){\r\n\t\tvar index;\r\n\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\r\n\t\tvar row = this.table.rowManager.findRow(rowInfo);\r\n\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\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\r\n\t\t\t\tthis.selectedRows.push(row);\r\n\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\r\n\t\t\t\tthis.dispatchExternal(\"rowSelected\", row.getComponent());\r\n\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\r\n\tisRowSelected(row){\r\n\t\treturn this.selectedRows.indexOf(row) !== -1;\r\n\t}\r\n\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\r\n\t\t\trowCount = self.selectedRows.length;\r\n\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\r\n\t\t\tself._rowSelectionChanged(silent);\r\n\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\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\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\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\r\n\t\t\tif(index > -1){\r\n\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\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\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\r\n\t\t\t\tthis.dispatchExternal(\"rowDeselected\", row.getComponent());\r\n\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\r\n\tgetSelectedData(){\r\n\t\tvar data = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\tdata.push(row.getData());\r\n\t\t});\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\tgetSelectedRows(){\r\n\r\n\t\tvar rows = [];\r\n\r\n\t\tthis.selectedRows.forEach(function(row){\r\n\t\t\trows.push(row.getComponent());\r\n\t\t});\r\n\r\n\t\treturn rows;\r\n\t}\r\n\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\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\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\r\n\t\trow._row.modules.select.checkboxEl = element;\r\n\t}\r\n\r\n\tregisterHeaderSelectCheckbox (element) {\r\n\t\tthis.headerCheckboxElement = element;\r\n\t}\r\n\r\n\tchildRowSelection(row, select){\r\n\t\tvar children = this.table.modules.dataTree.getChildren(row, true);\r\n\r\n\t\tif(select){\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._selectRow(child, true);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tfor(let child of children){\r\n\t\t\t\tthis._deselectRow(child, true);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nSelectRow.moduleName = \"selectRow\";\r\n\r\nexport default SelectRow;","//sort datetime\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar DT = window.DateTime || luxon.DateTime;\r\n\tvar format = params.format || \"dd/MM/yyyy HH:mm:ss\",\r\n\talignEmptyValues = params.alignEmptyValues,\r\n\temptyAlign = 0;\r\n\r\n\tif(typeof DT != \"undefined\"){\r\n\t\ta = format === \"iso\" ? DT.fromISO(String(a)) : DT.fromFormat(String(a), format);\r\n\t\tb = format === \"iso\" ? DT.fromISO(String(b)) : DT.fromFormat(String(b), format);\r\n\r\n\t\tif(!a.isValid){\r\n\t\t\temptyAlign = !b.isValid ? 0 : -1;\r\n\t\t}else if(!b.isValid){\r\n\t\t\temptyAlign = 1;\r\n\t\t}else{\r\n\t\t\t//compare valid values\r\n\t\t\treturn a - b;\r\n\t\t}\r\n\r\n\t\t//fix empty values in position\r\n\t\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\t\temptyAlign *= -1;\r\n\t\t}\r\n\r\n\t\treturn emptyAlign;\r\n\r\n\t}else{\r\n\t\tconsole.error(\"Sort Error - 'datetime' sorter is dependant on luxon.js\");\r\n\t}\r\n};","import number from './sorters/number.js';\r\nimport string from './sorters/string.js';\r\nimport date from './sorters/date.js';\r\nimport time from './sorters/time.js';\r\nimport datetime from './sorters/datetime.js';\r\nimport boolean from './sorters/boolean.js';\r\nimport array from './sorters/array.js';\r\nimport exists from './sorters/exists.js';\r\nimport alphanum from './sorters/alphanum.js';\r\n\r\nexport default {\r\n\tnumber:number,\r\n\tstring:string,\r\n\tdate:date,\r\n\ttime:time,\r\n\tdatetime:datetime,\r\n\tboolean:boolean,\r\n\tarray:array,\r\n\texists:exists,\r\n\talphanum:alphanum\r\n};","//sort numbers\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar decimal = params.decimalSeparator;\r\n\tvar thousand = params.thousandSeparator;\r\n\tvar emptyAlign = 0;\r\n\r\n\ta = String(a);\r\n\tb = String(b);\r\n\r\n\tif(thousand){\r\n\t\ta = a.split(thousand).join(\"\");\r\n\t\tb = b.split(thousand).join(\"\");\r\n\t}\r\n\r\n\tif(decimal){\r\n\t\ta = a.split(decimal).join(\".\");\r\n\t\tb = b.split(decimal).join(\".\");\r\n\t}\r\n\r\n\ta = parseFloat(a);\r\n\tb = parseFloat(b);\r\n\r\n\t//handle non numeric values\r\n\tif(isNaN(a)){\r\n\t\temptyAlign = isNaN(b) ? 0 : -1;\r\n\t}else if(isNaN(b)){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\treturn a - b;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort strings\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\tvar locale;\r\n\r\n\t//handle empty values\r\n\tif(!a){\r\n\t\temptyAlign = !b ? 0 : -1;\r\n\t}else if(!b){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\t\t//compare valid values\r\n\t\tswitch(typeof params.locale){\r\n\t\t\tcase \"boolean\":\r\n\t\t\tif(params.locale){\r\n\t\t\t\tlocale = this.langLocale();\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\t\t\tcase \"string\":\r\n\t\t\tlocale = params.locale;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\treturn String(a).toLowerCase().localeCompare(String(b).toLowerCase(), locale);\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import datetime from './datetime.js';\r\n\r\n//sort date\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"dd/MM/yyyy\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","import datetime from './datetime.js';\r\n\r\n//sort times\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tif(!params.format){\r\n\t\tparams.format = \"HH:mm\";\r\n\t}\r\n\r\n\treturn datetime.call(this, a, b, aRow, bRow, column, dir, params);\r\n};","//sort booleans\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = a === true || a === \"true\" || a === \"True\" || a === 1 ? 1 : 0;\r\n\tvar el2 = b === true || b === \"true\" || b === \"True\" || b === 1 ? 1 : 0;\r\n\r\n\treturn el1 - el2;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = 0;\r\n\tvar el2 = 0;\r\n\tvar type = params.type || \"length\";\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\tfunction calc(value){\r\n\r\n\t\tswitch(type){\r\n\t\t\tcase \"length\":\r\n\t\t\treturn value.length;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"sum\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t});\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"max\":\r\n\t\t\treturn Math.max.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"min\":\r\n\t\t\treturn Math.min.apply(null, value) ;\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"avg\":\r\n\t\t\treturn value.reduce(function(c, d){\r\n\t\t\t\treturn c + d;\r\n\t\t\t}) / value.length;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t//handle non array values\r\n\tif(!Array.isArray(a)){\r\n\t\talignEmptyValues = !Array.isArray(b) ? 0 : -1;\r\n\t}else if(!Array.isArray(b)){\r\n\t\talignEmptyValues = 1;\r\n\t}else{\r\n\r\n\t\t//compare valid values\r\n\t\tel1 = a ? calc(a) : 0;\r\n\t\tel2 = b ? calc(b) : 0;\r\n\r\n\t\treturn el1 - el2;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","//sort if element contains any data\r\nexport default function(a, b, aRow, bRow, column, dir, params){\r\n\tvar el1 = typeof a == \"undefined\" ? 0 : 1;\r\n\tvar el2 = typeof b == \"undefined\" ? 0 : 1;\r\n\r\n\treturn el1 - el2;\r\n};","//sort alpha numeric strings\r\nexport default function(as, bs, aRow, bRow, column, dir, params){\r\n\tvar a, b, a1, b1, i= 0, L, rx = /(\\d+)|(\\D+)/g, rd = /\\d/;\r\n\tvar alignEmptyValues = params.alignEmptyValues;\r\n\tvar emptyAlign = 0;\r\n\r\n\t//handle empty values\r\n\tif(!as && as!== 0){\r\n\t\temptyAlign = !bs && bs!== 0 ? 0 : -1;\r\n\t}else if(!bs && bs!== 0){\r\n\t\temptyAlign = 1;\r\n\t}else{\r\n\r\n\t\tif(isFinite(as) && isFinite(bs)) return as - bs;\r\n\t\ta = String(as).toLowerCase();\r\n\t\tb = String(bs).toLowerCase();\r\n\t\tif(a === b) return 0;\r\n\t\tif(!(rd.test(a) && rd.test(b))) return a > b ? 1 : -1;\r\n\t\ta = a.match(rx);\r\n\t\tb = b.match(rx);\r\n\t\tL = a.length > b.length ? b.length : a.length;\r\n\t\twhile(i < L){\r\n\t\t\ta1= a[i];\r\n\t\t\tb1= b[i++];\r\n\t\t\tif(a1 !== b1){\r\n\t\t\t\tif(isFinite(a1) && isFinite(b1)){\r\n\t\t\t\t\tif(a1.charAt(0) === \"0\") a1 = \".\" + a1;\r\n\t\t\t\t\tif(b1.charAt(0) === \"0\") b1 = \".\" + b1;\r\n\t\t\t\t\treturn a1 - b1;\r\n\t\t\t\t}\r\n\t\t\t\telse return a1 > b1 ? 1 : -1;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn a.length > b.length;\r\n\t}\r\n\r\n\t//fix empty values in position\r\n\tif((alignEmptyValues === \"top\" && dir === \"desc\") || (alignEmptyValues === \"bottom\" && dir === \"asc\")){\r\n\t\temptyAlign *= -1;\r\n\t}\r\n\r\n\treturn emptyAlign;\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultSorters from './defaults/sorters.js';\r\n\r\nclass Sort extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t \tthis.sortList = []; //holder current sort\r\n\t \tthis.changed = false; //has the sort changed since last render\r\n\r\n\t \tthis.registerTableOption(\"sortMode\", \"local\"); //local or remote sorting\r\n\r\n\t \tthis.registerTableOption(\"initialSort\", false); //initial sorting criteria\r\n\t \tthis.registerTableOption(\"columnHeaderSortMulti\", true); //multiple or single column sorting\r\n\t \tthis.registerTableOption(\"sortOrderReverse\", false); //reverse internal sort ordering\r\n\t \tthis.registerTableOption(\"headerSortElement\", \"
\"); //header sort element\r\n\r\n\t \tthis.registerColumnOption(\"sorter\");\r\n\t \tthis.registerColumnOption(\"sorterParams\");\r\n\r\n\t \tthis.registerColumnOption(\"headerSort\", true);\r\n\t \tthis.registerColumnOption(\"headerSortStartingDir\");\r\n\t \tthis.registerColumnOption(\"headerSortTristate\");\r\n\r\n\t }\r\n\r\n\t initialize(){\r\n\t \tthis.subscribe(\"column-layout\", this.initializeColumn.bind(this));\r\n\t \tthis.subscribe(\"table-built\", this.tableBuilt.bind(this));\r\n\t \tthis.registerDataHandler(this.sort.bind(this), 20);\r\n\r\n\t \tthis.registerTableFunction(\"setSort\", this.userSetSort.bind(this));\r\n\t \tthis.registerTableFunction(\"getSorters\", this.getSort.bind(this));\r\n\t \tthis.registerTableFunction(\"clearSort\", this.clearSort.bind(this));\r\n\r\n\t \tif(this.table.options.sortMode === \"remote\"){\r\n\t \t\tthis.subscribe(\"data-params\", this.remoteSortParams.bind(this));\r\n\t \t}\r\n\t }\r\n\r\n\t tableBuilt(){\r\n\t \tif(this.table.options.initialSort){\r\n\t \t\tthis.setSort(this.table.options.initialSort);\r\n\t \t}\r\n\t }\r\n\r\n\t remoteSortParams(data, config, silent, params){\r\n\t \tvar sorters = this.getSort();\r\n\r\n\t \tsorters.forEach((item) => {\r\n\t \t\tdelete item.column;\r\n\t \t});\r\n\r\n\t \tparams.sort = sorters;\r\n\r\n\t \treturn params;\r\n\t }\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tuserSetSort(sortList, dir){\r\n\t\tthis.setSort(sortList, dir);\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\tclearSort(){\r\n\t\tthis.clear();\r\n\t\t// this.table.rowManager.sorterRefresh();\r\n\t\tthis.refreshSort();\r\n\t}\r\n\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\t//initialize column header for sorting\r\n\tinitializeColumn(column){\r\n\t\tvar sorter = false,\r\n\t\tcolEl,\r\n\t\tarrowEl;\r\n\r\n\t\tswitch(typeof column.definition.sorter){\r\n\t\t\tcase \"string\":\r\n\t\t\tif(Sort.sorters[column.definition.sorter]){\r\n\t\t\t\tsorter = Sort.sorters[column.definition.sorter];\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Error - No such sorter found: \", column.definition.sorter);\r\n\t\t\t}\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\tsorter = column.definition.sorter;\r\n\t\t\tbreak;\r\n\t\t}\r\n\r\n\t\tcolumn.modules.sort = {\r\n\t\t\tsorter:sorter, dir:\"none\",\r\n\t\t\tparams:column.definition.sorterParams || {},\r\n\t\t\tstartingDir:column.definition.headerSortStartingDir || \"asc\",\r\n\t\t\ttristate: column.definition.headerSortTristate,\r\n\t\t};\r\n\r\n\t\tif(column.definition.headerSort !== false){\r\n\r\n\t\t\tcolEl = column.getElement();\r\n\r\n\t\t\tcolEl.classList.add(\"tabulator-sortable\");\r\n\r\n\r\n\t\t\tarrowEl = document.createElement(\"div\");\r\n\t\t\tarrowEl.classList.add(\"tabulator-col-sorter\");\r\n\r\n\t\t\tif(typeof this.table.options.headerSortElement == \"object\"){\r\n\t\t\t\tarrowEl.appendChild(this.table.options.headerSortElement);\r\n\t\t\t}else{\r\n\t\t\t\tarrowEl.innerHTML = this.table.options.headerSortElement;\r\n\t\t\t}\r\n\r\n\t\t\t//create sorter arrow\r\n\t\t\tcolumn.titleHolderElement.appendChild(arrowEl);\r\n\r\n\t\t\tcolumn.modules.sort.element = arrowEl;\r\n\r\n\t\t\t//sort on click\r\n\t\t\tcolEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\tvar dir = \"\",\r\n\t\t\t\tsorters=[],\r\n\t\t\t\tmatch = false;\r\n\r\n\t\t\t\tif(column.modules.sort){\r\n\t\t\t\t\tif(column.modules.sort.tristate){\r\n\t\t\t\t\t\tif(column.modules.sort.dir == \"none\"){\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(column.modules.sort.dir == column.modules.sort.startingDir){\r\n\t\t\t\t\t\t\t\tdir = column.modules.sort.dir == \"asc\" ? \"desc\" : \"asc\";\r\n\t\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t\tdir = \"none\";\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tswitch(column.modules.sort.dir){\r\n\t\t\t\t\t\t\tcase \"asc\":\r\n\t\t\t\t\t\t\tdir = \"desc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tcase \"desc\":\r\n\t\t\t\t\t\t\tdir = \"asc\";\r\n\t\t\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\t\t\tdefault:\r\n\t\t\t\t\t\t\tdir = column.modules.sort.startingDir;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\r\n\t\t\t\t\tif (this.table.options.columnHeaderSortMulti && (e.shiftKey || e.ctrlKey)) {\r\n\t\t\t\t\t\tsorters = this.getSort();\r\n\r\n\t\t\t\t\t\tmatch = sorters.findIndex((sorter) => {\r\n\t\t\t\t\t\t\treturn sorter.field === column.getField();\r\n\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\tif(match > -1){\r\n\t\t\t\t\t\t\tsorters[match].dir = dir;\r\n\r\n\t\t\t\t\t\t\tif(match != sorters.length -1){\r\n\t\t\t\t\t\t\t\tmatch = sorters.splice(match, 1)[0];\r\n\t\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\t\tsorters.push(match);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tif(dir != \"none\"){\r\n\t\t\t\t\t\t\t\tsorters.push({column:column, dir:dir});\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t//add to existing sort\r\n\t\t\t\t\t\tthis.setSort(sorters);\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(dir == \"none\"){\r\n\t\t\t\t\t\t\tthis.clear();\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\t//sort by column only\r\n\t\t\t\t\t\t\tthis.setSort(column, dir);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// this.table.rowManager.sorterRefresh(!this.sortList.length);\r\n\t\t\t\t\tthis.refreshSort();\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\trefreshSort(){\r\n\t\tif(this.table.options.sortMode === \"remote\"){\r\n\t\t\tthis.reloadData();\r\n\t\t}else{\r\n\t\t\tthis.refreshData(true);\r\n\t\t}\r\n\r\n\t\t//TODO - Persist left position of row manager\r\n\t\t// left = this.scrollLeft;\r\n\t\t// this.scrollHorizontal(left);\r\n\t}\r\n\r\n\t//check if the sorters have changed since last use\r\n\thasChanged(){\r\n\t\tvar changed = this.changed;\r\n\t\tthis.changed = false;\r\n\t\treturn changed;\r\n\t}\r\n\r\n\t//return current sorters\r\n\tgetSort(){\r\n\t\tvar self = this,\r\n\t\tsorters = [];\r\n\r\n\t\tself.sortList.forEach(function(item){\r\n\t\t\tif(item.column){\r\n\t\t\t\tsorters.push({column:item.column.getComponent(), field:item.column.getField(), dir:item.dir});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn sorters;\r\n\t}\r\n\r\n\t//change sort list and trigger sort\r\n\tsetSort(sortList, dir){\r\n\t\tvar self = this,\r\n\t\tnewSortList = [];\r\n\r\n\t\tif(!Array.isArray(sortList)){\r\n\t\t\tsortList = [{column: sortList, dir:dir}];\r\n\t\t}\r\n\r\n\t\tsortList.forEach(function(item){\r\n\t\t\tvar column;\r\n\r\n\t\t\tcolumn = self.table.columnManager.findColumn(item.column);\r\n\r\n\t\t\tif(column){\r\n\t\t\t\titem.column = column;\r\n\t\t\t\tnewSortList.push(item);\r\n\t\t\t\tself.changed = true;\r\n\t\t\t}else{\r\n\t\t\t\tconsole.warn(\"Sort Warning - Sort field does not exist and is being ignored: \", item.column);\r\n\t\t\t}\r\n\r\n\t\t});\r\n\r\n\t\tself.sortList = newSortList;\r\n\r\n\t\tthis.dispatch(\"sort-changed\");\r\n\t}\r\n\r\n\t//clear sorters\r\n\tclear(){\r\n\t\tthis.setSort([]);\r\n\t}\r\n\r\n\t//find appropriate sorter for column\r\n\tfindSorter(column){\r\n\t\tvar row = this.table.rowManager.activeRows[0],\r\n\t\tsorter = \"string\",\r\n\t\tfield, value;\r\n\r\n\t\tif(row){\r\n\t\t\trow = row.getData();\r\n\t\t\tfield = column.getField();\r\n\r\n\t\t\tif(field){\r\n\r\n\t\t\t\tvalue = column.getFieldValue(row);\r\n\r\n\t\t\t\tswitch(typeof value){\r\n\t\t\t\t\tcase \"undefined\":\r\n\t\t\t\t\tsorter = \"string\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tcase \"boolean\":\r\n\t\t\t\t\tsorter = \"boolean\";\r\n\t\t\t\t\tbreak;\r\n\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\tif(!isNaN(value) && value !== \"\"){\r\n\t\t\t\t\t\tsorter = \"number\";\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(value.match(/((^[0-9]+[a-z]+)|(^[a-z]+[0-9]+))+$/i)){\r\n\t\t\t\t\t\t\tsorter = \"alphanum\";\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn Sort.sorters[sorter];\r\n\t}\r\n\r\n\t//work through sort list sorting data\r\n\tsort(data){\r\n\t\tvar self = this,\r\n\t\tsortList = this.table.options.sortOrderReverse ? self.sortList.slice().reverse() : self.sortList,\r\n\t\tsortListActual = [],\r\n\t\trowComponents = [],\r\n\t\tlastSort;\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorting\")){\r\n\t\t\tthis.dispatchExternal(\"dataSorting\", self.getSort());\r\n\t\t}\r\n\r\n\t\tself.clearColumnHeaders();\r\n\r\n\t\tif(this.table.options.sortMode !== \"remote\"){\r\n\r\n\t\t\t//build list of valid sorters and trigger column specific callbacks before sort begins\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tvar sortObj = item.column.modules.sort;\r\n\r\n\t\t\t\tif(item.column && sortObj){\r\n\r\n\t\t\t\t\t//if no sorter has been defined, take a guess\r\n\t\t\t\t\tif(!sortObj.sorter){\r\n\t\t\t\t\t\tsortObj.sorter = self.findSorter(item.column);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\titem.params = typeof sortObj.params === \"function\" ? sortObj.params(item.column.getComponent(), item.dir) : sortObj.params;\r\n\r\n\t\t\t\t\tsortListActual.push(item);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\r\n\t\t\t//sort data\r\n\t\t\tif (sortListActual.length) {\r\n\t\t\t\tself._sortItems(data, sortListActual);\r\n\t\t\t}\r\n\r\n\t\t}else{\r\n\t\t\tsortList.forEach(function(item, i){\r\n\t\t\t\tself.setColumnHeader(item.column, item.dir);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif(this.subscribedExternal(\"dataSorted\")){\r\n\t\t\tdata.forEach((row) => {\r\n\t\t\t\trowComponents.push(row.getComponent());\r\n\t\t\t});\r\n\r\n\t\t\tthis.dispatchExternal(\"dataSorted\", self.getSort(), rowComponents);\r\n\t\t}\r\n\r\n\t\treturn data;\r\n\t}\r\n\r\n\t//clear sort arrows on columns\r\n\tclearColumnHeaders(){\r\n\t\tthis.table.columnManager.getRealColumns().forEach(function(column){\r\n\t\t\tif(column.modules.sort){\r\n\t\t\t\tcolumn.modules.sort.dir = \"none\";\r\n\t\t\t\tcolumn.getElement().setAttribute(\"aria-sort\", \"none\");\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t//set the column header sort direction\r\n\tsetColumnHeader(column, dir){\r\n\t\tcolumn.modules.sort.dir = dir;\r\n\t\tcolumn.getElement().setAttribute(\"aria-sort\", dir);\r\n\t}\r\n\r\n\t//sort each item in sort list\r\n\t_sortItems(data, sortList){\r\n\t\tvar sorterCount = sortList.length - 1;\r\n\r\n\t\tdata.sort((a, b) => {\r\n\t\t\tvar result;\r\n\r\n\t\t\tfor(var i = sorterCount; i>= 0; i--){\r\n\t\t\t\tlet sortItem = sortList[i];\r\n\r\n\t\t\t\tresult = this._sortRow(a, b, sortItem.column, sortItem.dir, sortItem.params);\r\n\r\n\t\t\t\tif(result !== 0){\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\treturn result;\r\n\t\t});\r\n\t}\r\n\r\n\t//process individual rows for a sort function on active data\r\n\t_sortRow(a, b, column, dir, params){\r\n\t\tvar el1Comp, el2Comp, colComp;\r\n\r\n\t\t//switch elements depending on search direction\r\n\t\tvar el1 = dir == \"asc\" ? a : b;\r\n\t\tvar el2 = dir == \"asc\" ? b : a;\r\n\r\n\t\ta = column.getFieldValue(el1.getData());\r\n\t\tb = column.getFieldValue(el2.getData());\r\n\r\n\t\ta = typeof a !== \"undefined\" ? a : \"\";\r\n\t\tb = typeof b !== \"undefined\" ? b : \"\";\r\n\r\n\t\tel1Comp = el1.getComponent();\r\n\t\tel2Comp = el2.getComponent();\r\n\r\n\t\treturn column.modules.sort.sorter.call(this, a, b, el1Comp, el2Comp, column.getComponent(), dir, params);\r\n\t}\r\n}\r\n\r\nSort.moduleName = \"sort\";\r\n\r\n//load defaults\r\nSort.sorters = defaultSorters;\r\n\r\nexport default Sort;","export default {\r\n\t//is integer\r\n\tinteger: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && Math.floor(value) === value;\r\n\t},\r\n\r\n\t//is float\r\n\tfloat: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvalue = Number(value);\r\n\t\treturn typeof value === 'number' && isFinite(value) && value % 1 !== 0;\r\n\t},\r\n\r\n\t//must be a number\r\n\tnumeric: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn !isNaN(value);\r\n\t},\r\n\r\n\t//must be a string\r\n\tstring: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn isNaN(value);\r\n\t},\r\n\r\n\t//maximum value\r\n\tmax: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) <= parameters;\r\n\t},\r\n\r\n\t//minimum value\r\n\tmin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn parseFloat(value) >= parameters;\r\n\t},\r\n\r\n\t//starts with value\r\n\tstarts: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().startsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\t//ends with value\r\n\tends: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).toLowerCase().endsWith(String(parameters).toLowerCase());\r\n\t},\r\n\r\n\r\n\t//minimum string length\r\n\tminLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length >= parameters;\r\n\t},\r\n\r\n\t//maximum string length\r\n\tmaxLength: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\treturn String(value).length <= parameters;\r\n\t},\r\n\r\n\t//in provided value list\r\n\tin: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tif(typeof parameters == \"string\"){\r\n\t\t\tparameters = parameters.split(\"|\");\r\n\t\t}\r\n\r\n\t\treturn value === \"\" || parameters.indexOf(value) > -1;\r\n\t},\r\n\r\n\t//must match provided regex\r\n\tregex: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar reg = new RegExp(parameters);\r\n\r\n\t\treturn reg.test(value);\r\n\t},\r\n\r\n\t//value must be unique in this column\r\n\tunique: function(cell, value, parameters){\r\n\t\tif(value === \"\" || value === null || typeof value === \"undefined\"){\r\n\t\t\treturn true;\r\n\t\t}\r\n\t\tvar unique = true;\r\n\r\n\t\tvar cellData = cell.getData();\r\n\t\tvar column = cell.getColumn()._getSelf();\r\n\r\n\t\tthis.table.rowManager.rows.forEach(function(row){\r\n\t\t\tvar data = row.getData();\r\n\r\n\t\t\tif(data !== cellData){\r\n\t\t\t\tif(value == column.getFieldValue(data)){\r\n\t\t\t\t\tunique = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn unique;\r\n\t},\r\n\r\n\t//must have a value\r\n\trequired:function(cell, value, parameters){\r\n\t\treturn value !== \"\" && value !== null && typeof value !== \"undefined\";\r\n\t},\r\n};","import Module from '../../core/Module.js';\r\n\r\nimport defaultValidators from './defaults/validators.js';\r\n\r\nclass Validate extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.invalidCells = [];\r\n\r\n\t\tthis.registerTableOption(\"validationMode\", \"blocking\");\r\n\r\n\t\tthis.registerColumnOption(\"validator\");\r\n\r\n\t\tthis.registerTableFunction(\"getInvalidCells\", this.getInvalidCells.bind(this));\r\n\t\tthis.registerTableFunction(\"clearCellValidation\", this.userClearCellValidation.bind(this));\r\n\t\tthis.registerTableFunction(\"validate\", this.userValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"cell\", \"isValid\", this.cellIsValid.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"clearValidation\", this.clearValidation.bind(this));\r\n\t\tthis.registerComponentFunction(\"cell\", \"validate\", this.cellValidate.bind(this));\r\n\r\n\t\tthis.registerComponentFunction(\"column\", \"validate\", this.columnValidate.bind(this));\r\n\t\tthis.registerComponentFunction(\"row\", \"validate\", this.rowValidate.bind(this));\r\n\t}\r\n\r\n\r\n\tinitialize(){\r\n\t\tthis.subscribe(\"cell-delete\", this.clearValidation.bind(this));\r\n\t\tthis.subscribe(\"column-layout\", this.initializeColumnCheck.bind(this));\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Cell Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\tcellIsValid(cell){\r\n\t\treturn cell.modules.validate ? !cell.modules.validate.invalid : true;\r\n\t}\r\n\r\n\tcellValidate(cell){\r\n\t\treturn this.validate(cell.column.modules.validate, cell, cell.getValue());\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Column Functions ////////\r\n\t///////////////////////////////////\r\n\r\n\tcolumnValidate(column){\r\n\t\tvar invalid = [];\r\n\r\n\t\tcolumn.cells.forEach((cell) => {\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t////////// Row Functions //////////\r\n\t///////////////////////////////////\r\n\r\n\trowValidate(row){\r\n\t\tvar invalid = [];\r\n\r\n\t\trow.cells.forEach((cell) => {\r\n\t\t\tif(!this.cellValidate(cell)){\r\n\t\t\t\tinvalid.push(cell.getComponent());\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn invalid.length ? invalid : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Table Functions /////////\r\n\t///////////////////////////////////\r\n\r\n\r\n\tuserClearCellValidation(cells){\r\n\t\tif(!cells){\r\n\t\t\tcells = this.getInvalidCells();\r\n\t\t}\r\n\r\n\t\tif(!Array.isArray(cells)){\r\n\t\t\tcells = [cells];\r\n\t\t}\r\n\r\n\t\tcells.forEach((cell) => {\r\n\t\t\tthis.clearValidation(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tuserValidate(cells){\r\n\t\tvar output = [];\r\n\r\n\t\t//clear row data\r\n\t\tthis.table.rowManager.rows.forEach((row) => {\r\n\t\t\trow = row.getComponent();\r\n\r\n\t\t\tvar valid = row.validate();\r\n\r\n\t\t\tif(valid !== true){\r\n\t\t\t\toutput = output.concat(valid);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn output.length ? output : true;\r\n\t}\r\n\r\n\t///////////////////////////////////\r\n\t///////// Internal Logic //////////\r\n\t///////////////////////////////////\r\n\r\n\tinitializeColumnCheck(column){\r\n\t\tif(typeof column.definition.validator !== \"undefined\"){\r\n\t\t\tthis.initializeColumn(column);\r\n\t\t}\r\n\t}\r\n\r\n\t//validate\r\n\tinitializeColumn(column){\r\n\t\tvar self = this,\r\n\t\tconfig = [],\r\n\t\tvalidator;\r\n\r\n\t\tif(column.definition.validator){\r\n\r\n\t\t\tif(Array.isArray(column.definition.validator)){\r\n\t\t\t\tcolumn.definition.validator.forEach((item) => {\r\n\t\t\t\t\tvalidator = self._extractValidator(item);\r\n\r\n\t\t\t\t\tif(validator){\r\n\t\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\t}else{\r\n\t\t\t\tvalidator = this._extractValidator(column.definition.validator);\r\n\r\n\t\t\t\tif(validator){\r\n\t\t\t\t\tconfig.push(validator);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tcolumn.modules.validate = config.length ? config : false;\r\n\t\t}\r\n\t}\r\n\r\n\t_extractValidator(value){\r\n\t\tvar type, params, pos;\r\n\r\n\t\tswitch(typeof value){\r\n\t\t\tcase \"string\":\r\n\t\t\tpos = value.indexOf(':');\r\n\r\n\t\t\tif(pos > -1){\r\n\t\t\t\ttype = value.substring(0,pos);\r\n\t\t\t\tparams = value.substring(pos+1);\r\n\t\t\t}else{\r\n\t\t\t\ttype = value;\r\n\t\t\t}\r\n\r\n\t\t\treturn this._buildValidator(type, params);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"function\":\r\n\t\t\treturn this._buildValidator(value);\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"object\":\r\n\t\t\treturn this._buildValidator(value.type, value.parameters);\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\t_buildValidator(type, params){\r\n\r\n\t\tvar func = typeof type == \"function\" ? type : Validate.validators[type];\r\n\r\n\t\tif(!func){\r\n\t\t\tconsole.warn(\"Validator Setup Error - No matching validator found:\", type);\r\n\t\t\treturn false;\r\n\t\t}else{\r\n\t\t\treturn {\r\n\t\t\t\ttype:typeof type == \"function\" ? \"function\" : type,\r\n\t\t\t\tfunc:func,\r\n\t\t\t\tparams:params,\r\n\t\t\t};\r\n\t\t}\r\n\t}\r\n\r\n\tvalidate(validators, cell, value){\r\n\t\tvar self = this,\r\n\t\tvalid = [],\r\n\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\tif(validators){\r\n\t\t\tvalidators.forEach((item) => {\r\n\t\t\t\tif(!item.func.call(self, cell.getComponent(), value, item.params)){\r\n\t\t\t\t\tvalid.push({\r\n\t\t\t\t\t\ttype:item.type,\r\n\t\t\t\t\t\tparameters:item.params\r\n\t\t\t\t\t});\r\n\t\t\t\t}\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tvalid = valid.length ? valid : true;\r\n\r\n\t\tif(!cell.modules.validate){\r\n\t\t\tcell.modules.validate = {};\r\n\t\t}\r\n\r\n\t\tif(valid === true){\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tcell.modules.validate.invalid = true;\r\n\r\n\t\t\tif(this.table.options.validationMode !== \"manual\"){\r\n\t\t\t\tcell.getElement().classList.add(\"tabulator-validation-fail\");\r\n\t\t\t}\r\n\r\n\t\t\tif(invalidIndex == -1){\r\n\t\t\t\tthis.invalidCells.push(cell);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn valid;\r\n\t}\r\n\r\n\tgetInvalidCells(){\r\n\t\tvar output = [];\r\n\r\n\t\tthis.invalidCells.forEach((cell) => {\r\n\t\t\toutput.push(cell.getComponent());\r\n\t\t});\r\n\r\n\t\treturn output;\r\n\t}\r\n\r\n\tclearValidation(cell){\r\n\t\tvar invalidIndex;\r\n\r\n\t\tif(cell.modules.validate && cell.modules.validate.invalid){\r\n\r\n\t\t\tcell.getElement().classList.remove(\"tabulator-validation-fail\");\r\n\t\t\tcell.modules.validate.invalid = false;\r\n\r\n\t\t\tinvalidIndex = this.invalidCells.indexOf(cell);\r\n\r\n\t\t\tif(invalidIndex > -1){\r\n\t\t\t\tthis.invalidCells.splice(invalidIndex, 1);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n\r\nValidate.moduleName = \"validate\";\r\n\r\n//load defaults\r\nValidate.validators = defaultValidators;\r\n\r\nexport default Validate;","//tabulator with all modules installed\r\nimport {default as Tabulator} from './Tabulator.js';\r\nimport * as modules from '../core/modules/optional.js';\r\nimport ModuleBinder from './tools/ModuleBinder.js';\r\n\r\nclass TabulatorFull extends Tabulator {};\r\n\r\n//bind modules and static functionality\r\nnew ModuleBinder(TabulatorFull, modules);\r\n\r\nexport default TabulatorFull;"],"names":["CoreFeature","table","data","silent","this","dataLoader","load","undefined","modules","localize","getText","arguments","bind","getLocale","comms","getConnections","send","layout","getMode","eventBus","subscribe","unsubscribe","key","subscribed","subscriptionChange","dispatch","chain","confirm","externalEvents","options","value","module","ColumnComponent","column","_column","type","Proxy","get","target","name","receiver","componentFunctionBinder","handle","getElement","getDefinition","getField","getTitleDownload","cells","forEach","cell","push","getComponent","visible","isGroup","columns","show","hide","output","length","parent","Column","columnManager","scrollToColumn","to","after","toColumn","findColumn","moveColumn","console","warn","nextCol","nextColumn","prevCol","prevColumn","updates","updateDefinition","getWidth","width","result","reinitializeWidth","setWidth","renderer","rerenderColumns","CellComponent","_cell","getValue","getOldValue","initialValue","row","getData","mutate","setValue","setValueActual","checkHeight","Cell","element","oldValue","height","minWidth","component","loaded","build","generateElement","_configureCell","getFieldValue","document","createElement","className","setAttribute","field","style","textAlign","hozAlign","vertAlign","display","alignItems","top","bottom","middle","justifyContent","left","right","center","definition","cssClass","split","classList","add","tooltipGenerationMode","addEventListener","e","_this2","_generateTooltip","val","_this3","innerHTML","Node","firstChild","removeChild","appendChild","tooltip","containerOnly","layoutElement","setValueProcessData","cellRendered","cellEdited","call","dispatchExternal","subscribedExternal","rowManager","changed","setFieldValue","_generateContents","widthStyled","offsetWidth","minWidthStyled","maxWidth","maxWidthStyled","reinitializeHeight","heightStyled","offsetHeight","redrawBlock","parentNode","deleteCell","calcs","getCellIndex","def","_this","contentElement","titleHolderElement","titleElement","groupElement","createGroupElement","fieldStructure","titleDownload","titleFormatterRendered","mapDefinitions","setField","maxInitialWidth","widthFixed","i","newCol","attachColumn","checkColumnVisibility","registerColumnField","_initialize","bindModuleColumns","el","defaults","columnDefaults","optionsList","generate","defaultOptionList","Object","keys","indexOf","title","nestedFieldSeparator","_getNestedData","_getFlatData","_setNestedData","_setFlatData","registerColumnPosition","reRegisterPosition","headerTooltip","langBind","headerVertical","_bindEvents","_buildColumnHeaderContent","_buildGroupHeader","_buildColumnHeader","setTooltip","_this4","dblTap","tapHold","tap","headerClick","_this5","headerDblClick","headerContext","headerTap","passive","headerDblTap","clearTimeout","setTimeout","headerTapHold","_this6","setMinWidth","parseInt","setMaxWidth","headerHozAlign","_buildColumnHeaderTitle","editableTitle","stopPropagation","focus","_this7","text","_formatColumnHeaderTitle","contents","_this8","dataObj","structure","alignment","parentHeight","getGroupElement","clientHeight","getHeadersElement","minHeight","paddingTop","verticalAlign","clearVerticalAlign","formatter","rowNumColumn","getFirstColumn","getLastColumn","getTopColumn","updateBranches","colDefs","responsiveToggle","verticalAlignHeaders","matchChildWidths","childWidth","child","index","splice","setWidthActual","isNaN","Math","floor","clientWidth","max","min","rows","heightInitialized","offsetParent","clearCellHeight","calcHeight","setCellHeight","ceil","getBoundingClientRect","Promise","resolve","reject","_this9","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","force","fitToData","clearWidth","setTo","error","assign","addColumn","then","_this10","defaultOptions","Helpers","box","window","pageYOffset","documentElement","clientTop","pageXOffset","clientLeft","obj","clone","list","objectProto","__proto__","arrayProto","Array","isArray","subject","match","copy","_typeof","findIndex","item","unshift","deepClone","OptionsList","msgType","registeredDefaults","option","userOptions","debugInvalidOptions","hasOwnProperty","Renderer","elementVertical","elementHorizontal","tableElement","verticalFillMode","callback","update","blockRedraw","dir","includingBuffer","getDisplayRows","rowEl","remove","clearRows","clearColumns","renderRows","renderColumns","rerenderRows","position","ifVisible","rowIndex","offset","scrollToRowIfVisible","elVisible","elOffset","scrollToRowPosition","scrollToRowNearestTop","scrollToRow","scrollHeight","scrollTop","offsetTop","BaiscHorizontal","VirtualDomHorizontal","leftCol","rightCol","scrollLeft","vDomScrollPosLeft","vDomScrollPosRight","vDomPadLeft","vDomPadRight","fitDataColAvg","initialized","compatibilityCheck","ok","find","col","frozen","dataChange","scroll","old","cols","clear","colPos","columnsByIndex","config","leftPos","rightPos","fitDataCheck","vdomHoz","paddingLeft","paddingRight","reinitChanged","reinitializeRows","initializeRow","reinitializeRow","change","collsWidth","colEnd","generateCells","layoutRefresh","getVisibleRows","diff","addColRight","removeColLeft","addColLeft","removeColRight","start","end","getCell","fitDataColActualWidthCheck","prepend","ex","message","newWidth","widthDiff","colPositionAdjust","ColumnManager","blockHozScrollEvent","headersElement","columnsByField","defaultColumnOptions","initializeRenderer","createHeadersElement","createHeaderElement","insertBefore","scrollHorizontal","renderClass","renderers","RendererVirtualDomHorizontal","RendererBasicHorizontal","renderHorizontal","initialize","headerVisible","hozAdjust","scrollWidth","marginLeft","scrollColumns","sorter","definitions","autoColumnsDefinitions","setColumns","_addColumn","_reIndexColumns","redraw","before","nextToColumn","colEl","topColumn","parentIndex","nextEl","nextSibling","columnRendered","getHeight","columnHeaderVertAlign","adjustTableSize","_getSelf","HTMLElement","root","matches","active","structured","from","moveColumnActual","reinitialize","_moveColumnInArray","getComponents","updateRows","toIndex","fromIndex","concat","adjust","scrollToColumnPosition","scrollToColumnIfVisible","offsetLeft","generateCell","totalWidth","fixedWidth","colWidth","layoutMode","resetScroll","footerManager","RowComponent","_row","transform","getCells","getRowPosition","moveToRow","updateData","normalizeHeight","nextRow","prevRow","Row","manualHeight","outerHeight","created","setData","create","deleteCells","renderRowCells","rowFormatter","rerenderRowCells","children","maxHeight","resizableRows","setHeight","clearHeight","updatedData","newRowData","tempData","attrname","JSON","parse","getColumnsByFieldRoot","findCell","nextDisplayRow","prevDisplayRow","toRow","findRow","moveRowActual","refreshActiveData","deleteActual","getRowIndex","detatchModules","deleteRow","group","BaiscVertical","visibility","onlyGroupHeaders","styleRow","rowTop","abs","VirtualDomVertical","vDomRowHeight","vDomTop","vDomBottom","vDomScrollPosTop","vDomScrollPosBottom","vDomTopPad","vDomBottomPad","vDomMaxRenderChain","vDomWindowBuffer","vDomWindowMinTotalRows","vDomWindowMinMarginRows","vDomTopNewRows","vDomBottomNewRows","paddingBottom","_virtualRenderFill","topRow","topOffset","deinitializeHeight","topDiff","bottomDiff","margin","_addTopRow","vDomScrollHeight","_removeBottomRow","_addBottomRow","_removeTopRow","renderVerticalBuffer","topEdge","bottomEdge","topFound","bottomRow","slice","forceMove","holder","topPad","rowsHeight","heightOccupied","topPadHeight","rowsCount","containerHeight","rowHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRenderInPosition","dataPipeline","displayPipeline","leftDir","topDir","scrollRows","renderInPosition","columnsChanged","pagination","_setDataActual","reRenderInPosition","autoColumns","generateColumnsFromRowData","_wipeElements","wipe","allIndex","activeIndex","setActiveRows","displayRowIterator","displayIndex","regenerateRowNumbers","_showPlaceholder","pos","addRowActual","findAddRowPos","reverse","addRow","_clearPlaceholder","addRowPos","chainResult","moveRowInArray","findRowIndex","rowOnly","getDisplayRowIndex","getRows","handler","priority","sort","a","b","skipStage","stage","cascadeOrder","resetDisplayRows","setDisplayRows","renderTable","layoutColumnsOnNewData","viewable","visibleRows","RendererVirtualDomVertical","RendererBasicVertical","renderVertical","_clearTable","renderEmptyScroll","placeholder","initialHeight","otherHeight","external","resize","tableWidth","browser","event","createEvent","initEvent","dispatchEvent","Event","FooterManager","links","initializeElement","footerElement","querySelector","activate","deactivate","link","footerRedraw","InteractionManager","abortClasses","previousTargets","listeners","componentMap","pseudoTrackers","subscriber","pseudoTracking","buildListenerMap","bindSubscriptionWatchers","listenerMap","listener","components","pseudoMouseEnter","pseudoMouseLeave","leaveList","linkedKeys","filter","includes","values","comp","subscriptionChanged","clearWatchers","added","bindPseudoEvents","updateEventListeners","track","removeEventListener","path","composedPath","targets","findTargets","bindComponents","triggerEvents","targetMatches","previousTarget","ComponentFunctionBinder","bindings","funcName","hanlder","startsWith","DataLoader","loaderElement","createLoaderElement","msgElement","createMsgElement","loadingElement","errorElement","requestOrder","loading","template","dataLoaderLoading","trim","firstElementChild","dataLoaderError","params","replace","requestNo","showLoader","mapParams","dataSendParams","response","objectInvert","dataReceiveParams","rowData","hideLoader","showError","dataLoaderErrorTimeout","map","langText","ExternalEventBus","debug","events","subscriptionNotifiers","_debugDispatch","_dispatch","_notifiySubscriptionChange","notifiers","args","shift","callResult","apply","log","InternalEventBus","_debugChain","_chain","_debugConfirm","_confirm","fallback","confirmed","TableRegistry","tables","query","results","querySelectorAll","matchElement","Tabulator","lookupTable","Module","_handler","register","func","registerDataPipelineHandler","registerDisplayPipelineHandler","responsiveLayout","modExists","fitData","reinitializeColumnWidths","fitDataFill","fitDataGeneral","fitDataTable","fitDataStretch","colsWidth","gap","lastCol","responsive","fitColumns","flexColWidth","overflowWidth","flexWidth","flexGrowUnits","flexColumns","fixedShrinkColumns","flexShrinkUnits","gapFill","calcWidth","scaleColumns","freeSpace","shrinkCols","oversizeCols","oversizeSpace","remainingSpace","nextColWidth","remainingFlexGrowUnits","changeUnits","undersizeCols","calcGrow","widthGrow","calcShrink","widthShrink","Layout","mode","registerTableOption","registerColumnOption","modes","moduleName","defaultModes","Localize","locale","lang","langList","langs","headerFilterPlaceholder","setHeaderFilterPlaceholder","installLang","setLocale","registerTableFunction","getLang","headerFilters","_setLangProp","desiredLocale","navigator","language","toLowerCase","prefix","traverseLang","trans","prop","_executeBindings","pathArray","_getLangElement","level","rootPath","binding","Comms","receive","selectors","connections","con","action","connection","tableComms","commsReceived","ModuleBinder","tabulator","bindStaticFuctionality","bindModules","coreModules","moduleBindings","extendModule","property","source","registerModule","mod","registerModuleBinding","findTable","prototype","moduleCore","modulesCore","modulesRegular","core","mods","interactionMonitor","browserSlow","browserMobile","rtl","originalElement","initialzeCoreSystems","_create","_clearObjectPointers","_mapDeprecatedFunctionality","debugEventsExternal","debugEventsInternal","InteractionMonitor","getSelection","empty","removeAllRanges","selection","_rtlCheck","_buildElement","_initializeTable","_loadInitialData","getComputedStyle","textDirection","direction","reactiveData","newElement","tagName","attributes","replaceChild","_detectBrowser","span","deregister","ua","userAgent","vendor","opera","test","substr","restoreRedraw","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","foundRows","fromRow","getDefinitionTree","fromColumn","plugin","required","rowFormatterPrint","rowFormatterClipboard","rowFormatterHtmlOutput","Accessor","allowedTypes","initializeColumn","transformRow","accessor","charAt","toUpperCase","lookupAccessor","accessors","rowComponent","traverse","colCompnent","generateParamsList","serializeParams","encoded","encodeURIComponent","join","headers","body","url","stringify","form","FormData","append","Ajax","urlGenerator","loaderPromise","contentTypeFormatters","ajaxRequestFunc","defaultLoaderPromise","ajaxURLGenerator","defaultURLGenerator","ajaxURL","setUrl","setDefaultConfig","ajaxConfig","getUrl","requestDataCheck","requestParams","requestData","ajaxParams","previousData","generateConfig","sendRequest","defaultConfig","method","ajaxRequesting","ajaxResponse","contentType","ajaxContentType","Accept","location","origin","credentials","fetch","json","status","statusText","defaultContentTypeFormatters","Clipboard","pasteParser","pasteAction","customSelection","rowRange","blocked","clipboard","clipboardCopyRowRange","plain","html","preventDefault","clipboardCopyFormatter","generateExportList","clipboardCopyConfig","clipboardCopyStyled","genereateHTMLTable","generatePlainContent","clipboardData","originalEvent","reset","paste","setPasteParser","clipboardPasteParser","setPasteAction","clipboardPasteAction","getKey","range","internal","sel","textRange","createRange","selectNodeContents","toString","addRange","createTextRange","moveToElementText","select","execCommand","pasteActions","parser","pasteParsers","checkPaseOrigin","getPasteData","mutateData","mutator","valid","edit","currentCell","updateOrAddData","insert","addData","headerFindSuccess","columnMap","CalcComponent","calcParams","precision","reduce","sum","Number","toFixed","parseFloat","String","ColumnCalcs","topCalcs","botCalcs","genColumn","topElement","botElement","botRow","topInitialized","botInitialized","cellValueChanged","initializeColumnCheck","rowsUpdated","recalcActiveRows","tableRedraw","getResults","userRecalc","recalc","groupBy","recalcRowGroup","topCalc","bottomCalc","columnCalcs","topCalcParams","botCalcParams","bottomCalcParams","calculations","initializeTopRow","botCalc","initializeBottomRow","rowsToData","generateRow","frozenColumns","recalcGroup","groupRows","getRowGroup","getChildGroups","generateRowData","dataTree","dataTreeChildColumnCalcs","open","getFilteredTreeChildren","disable","enable","format","getFormatter","paramKey","getGroups","getGroupResults","groupObj","subGroups","getSubGroups","subGroupResults","subgroup","groups","defaultCalculations","DataTree","indent","collapseEl","expandEl","branchEl","elementField","startOpen","registerComponentFunction","collapseRow","expandRow","toggleRow","getTreeParent","getRowChildren","addTreeChildRow","isRowExpanded","dummyEl","dataTreeChildField","dataTreeChildIndent","dataTreeBranchElement","dataTreeCollapseElement","tabIndex","dataTreeExpandElement","dataTreeStartExpanded","layoutRow","rowDelete","rowDataChanged","columnMoving","initializeElementField","registerDisplayHandler","firstCol","getFirstVisibleColumn","dataTreeElementColumn","getTreeChildren","redrawNeeded","refreshData","childArray","controlEl","generateControlElement","cloneNode","marginRight","getPropertyValue","oldControl","getChildren","allChildren","generateChildren","dataTreeFilter","dataTreeSort","sub","childData","childRow","childIndex","findChildIndex","recurse","csv","setFileContents","delimiter","fileContents","depth","bom","jsonLines","pdf","header","autoTableParams","rowGroupStyles","fontStyle","fontSize","cellPadding","fillColor","rowCalcStyles","jsPDFParams","jsPDF","parseRow","styles","content","colSpan","rowSpan","orientation","unit","doc","jspdf","autoTable","didDrawPage","head","documentProcessing","xlsx","sheetName","workbook","XLSX","utils","book_new","tableFeatures","generateSheet","merges","worksheet","s","c","r","j","Date","sheet_add_aoa","encode_range","SheetNames","Sheets","sheetOnly","sheets","sheet","commsSend","intercept","buf","ArrayBuffer","view","Uint8Array","charCodeAt","s2ab","write","bookType","bookSST","Download","blob","download","downloadToTab","filename","interceptCallback","downloadFunc","downloaders","mime","triggerDownload","downloadConfig","downloadRowRange","groupHeader","groupHeaderDownload","_group","getRowCount","newTab","Blob","downloadReady","URL","createObjectURL","msSaveOrOpenBlob","click","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","defaultDownloaders","input","onRendered","success","cancel","editorParams","cellValue","search","padding","boxSizing","elementAttributes","getAttribute","onChange","preventScroll","textarea","vertNav","verticalNavigation","whiteSpace","getRow","heightNow","selectionStart","stopImmediatePropagation","number","step","blurFunc","self","cellEl","initialDisplayValue","defaultValue","listEl","multiselect","dataItems","currentItem","displayItems","currentItems","blurable","blockListShow","searchWord","searchWordTimeout","getUniqueColumnValues","getColumnByField","getColumn","parseItems","inputValues","curentValues","dataList","displayList","processComplexListItem","label","itemParams","setItem","sortValuesList","listItemFormatter","toggleItem","chooseItem","fillList","setCurrentItem","scrollIntoView","behavior","block","inline","fillInput","unsetItem","hideList","chooseItems","cancelItem","cursor","readOnly","len","unsetItems","character","fromCharCode","scrollTovalue","showList","autocomplete","uniqueColumnValues","genUniqueColumnValues","filterList","term","intialLoad","items","searchFunc","addNotice","searchingPlaceholder","fillListIfNotEmpty","err","showListOnEmpty","notice","searchEl","clearList","itemList","current","emptyPlaceholder","freetext","allowEmpty","showInputValue","star","maxStars","getElementsByTagName","size","stars","starsHolder","createElementNS","starChange","buildStar","starHolder","nextStar","blur","changeValue","overflow","textOverflow","progress","mouseDrag","mouseDragWidth","percent","bar","updateValue","calcVal","round","backgroundColor","screenX","tickCross","tristate","indetermValue","indeterminateValue","indetermState","marginTop","checked","indeterminate","Edit","mouseClick","recursionBlock","invalidEdit","editedCells","editors","getEditedCells","clearCellEdited","navigatePrev","navigateNext","navigateLeft","navigateRight","navigateUp","navigateDown","cellisEdited","clearEdited","editCell","cellCancelEdit","bindEditor","columnDeleteCheck","rowDeleteCheck","cancelEdit","keybindingNavigateNext","newRow","edited","nextCell","findNextEditableCell","getIndex","findPrevEditableCell","allowEdit","check","prevCell","editor","editable","validate","cellValidate","clearEditor","variableHeight","cellEditCancelled","contains","button","forceEdit","focusCellNoEvent","getRenderMode","leftEdge","rightEdge","leftMargin","rightMargin","cellEditor","rendered","focusScrollAdjust","cellClick","cellEditing","validationMode","editIndex","invalid","defaultEditors","ExportRow","ExportColumn","Export","cloneTableStyle","colVisProp","getHtml","columnHeaders","headersToExportRows","generateColumnGroupHeaders","bodyToExportRows","rowLookup","genereateTableElement","selectRow","selectedRows","columnGroups","colData","processColumnGroup","maxDepth","groupData","subGroup","subGroupData","columnVisCheck","headerDepth","exportRows","parseColumnGroup","rowGroups","exportCols","headerEl","bodyEl","lookupTableStyles","setup","treeElementField","mapElementStyles","genereateHeaderElement","genereateGroupElement","genereateCalcElement","genereateRowElement","evenRow","oddRow","calcRow","firstRow","firstGroup","getElementsByClassName","styleCells","firstCell","lastCell","classNames","generator","isVisible","cellWrapper","formatCells","formatExportValue","align","renderedCallback","htmlOutputConfig","props","lookup","fromStyle","filterVal","rowVal","filterParams","RegExp","keywords","separator","keyword","matchAll","endsWith","Filter","headerFilterColumns","prevHeaderFilterChangeCheck","tableInitialized","searchRows","searchData","userSetFilter","userRefreshFilter","userAddFilter","getFilters","userSetHeaderFilterFocus","userGetHeaderFilterValue","userSetHeaderFilterValue","getHeaderFilters","userRemoveFilter","userClearFilter","userClearHeaderFilter","setHeaderFilterFocus","reloadHeaderFilter","getHeaderFilterValue","setHeaderFilterValue","initializeColumnHeaderFilter","hideHeaderFilterElements","showHeaderFilterElements","tableBuilt","filterMode","remoteFilterParams","registerDataHandler","initialFilter","setFilter","initialHeaderFilter","refreshFilter","addFilter","removeFilter","all","clearFilter","clearHeaderFilter","headerFilter","setHeaderFilterColumnPlaceholder","filterFunc","filterType","tagType","attrType","filterChangeCheck","prevSuccess","emptyFunc","headerFilterFunc","filters","headerFilterFuncParams","fieldVal","colVal","trackChanges","generateHeaderFilterElement","filterElement","editorElement","typingTimer","searchTrigger","headerElement","headerFilterEmptyCheck","headerFilterParams","headerFilterLiveFilterDelay","hasAttribute","headerFilterLiveFilter","reloadData","findFilter","findSubFilters","ajax","filtersToArray","searchType","filterRecurse","rowList","activeRowComponents","filterRow","_this11","subFilter","_this12","defaultFilters","plaintext","formatterParams","emptyToSpace","sanitizeHTML","money","integer","decimal","rgx","floatVal","sign","decimalSym","thousandSym","thousand","negativeSign","symbolAfter","urlPrefix","labelField","urlField","image","src","urlSuffix","truthy","allowTruthy","tick","tickElement","cross","crossElement","datetime","DT","DateTime","luxon","inputFormat","outputFormat","invalidPlaceholder","newDatetime","fromISO","fromFormat","isValid","timezone","shiftTimezone","toFormat","datetimediff","suffix","humanize","date","now","traffic","percentValue","colors","color","legend","legendColor","legendAlign","barEl","barContainer","legendEl","holderEl","buttonTick","buttonCross","rownum","responsiveCollapse","toggleList","isOpen","rowSelection","checkbox","toggleSelect","isSelected","registerRowSelectCheckbox","deselectRow","registerHeaderSelectCheckbox","Format","formatValue","formatHeader","lookupFormatter","formatterPrint","print","formatterClipboard","formatterHtmlOutput","htmlOutput","formatters","mockCell","titleFormatter","titleFormatterParams","entityMap","defaultFormatters","FrozenColumns","leftColumns","rightColumns","rightPadding","initializationMode","scrollEndTimer","layoutCell","edge","frozenCheck","calcMargins","layoutColumnPosition","layoutCalcRows","_calcSpace","layoutGroupCalcs","groupList","allCells","leftParents","parentEl","getColGroupParentElement","FrozenRows","freezeRow","unfreezeRow","isRowFrozen","detachRow","styleRows","GroupComponent","toggleVisibility","groupManager","Group","oldGroup","hasSubGroups","groupIDLookups","_addRowToGroup","_addRow","elementContents","arrowElement","createElements","addBindings","createValueGroups","arrow","movableRows","moveRow","initializeGroupHeader","allowedValues","_createGroup","groupToggleElement","groupID","groupKey","headerGenerator","conformRowData","generateGroupHeaderContents","updateGroupRows","scrollHeader","groupValues","removeGroup","noCalc","_visSet","getHeadersAndRows","hasTopCalcs","detachElement","generateTopRow","hasBottomCalcs","generateBottomRow","groupClosedShowCalcs","count","getDisplayIndex","checkClassicModeGroupHeaderWidth","prev","compoment","getPath","childNodes","GroupRows","displayHandler","setGroupBy","setGroupValues","setGroupStartOpen","setGroupHeader","userGetGroups","userGetGroupedData","rowGetGroup","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","configureGroupSetup","rowDeleting","scrollHeaders","rowMoving","rowAddingIndex","rowSample","virtualRenderFill","groupStartOpen","langValue","removeCalcs","getRealColumns","lookupFunc","prevValue","assignRowToGroup","getGroupedData","toGroup","fromGroup","removeRow","insertRow","generateGroups","groupComponents","groupListData","pullGroupListData","rowCount","headerContent","oldGroups","createGroup","assignRowToExistingGroup","newGroupNeeded","oldRowGroup","oldGroupPath","newGroupPath","getExpectedPath","every","groupPath","groupId","History","history","clearComponentHistory","rowDeleted","rowAdded","rowMoved","undo","redo","getHistoryUndoSize","getHistoryRedoSize","posFrom","posTo","getGroup","newValue","undoers","redoers","oldRow","cellEdit","rowAdd","_rebindRow","rowMove","HtmlTableImport","fieldIndex","hasIndex","tableElementCheck","parseTable","_extractOptions","_extractHeaders","_generateBlankHeaders","optionsArr","attrib","_attribValue","exists","_findCol","textContent","inQuote","nextChar","Import","importFromFile","importFormat","loadDataCheck","loadData","importData","lookupImporter","structureData","importer","importers","extension","pickFile","extensions","accept","file","files","reader","FileReader","importReader","readAsArrayBuffer","readAsBinaryString","readAsDataURL","readAsText","onload","onerror","parsedData","structureArrayToObject","structureArrayToColumns","getColumns","defaultImporters","Interaction","eventMap","rowClick","rowDblClick","rowContext","rowMouseEnter","rowMouseLeave","rowMouseOver","rowMouseOut","rowMouseMove","rowTap","rowDblTap","rowTapHold","cellDblClick","cellContext","cellMouseEnter","cellMouseLeave","cellMouseOver","cellMouseOut","cellMouseMove","cellTap","cellDblTap","cellTapHold","headerMouseEnter","headerMouseLeave","headerMouseOver","headerMouseOut","headerMouseMove","groupClick","groupDblClick","groupContext","groupMouseEnter","groupMouseLeave","groupMouseOver","groupMouseOut","groupMouseMove","groupTap","groupDblTap","groupTapHold","subscribers","touchSubscribers","columnSubscribers","touchWatchers","tapDbl","initializeExternalEvents","cellContentsSelectionFixer","selectNode","subscriptionChangeExternal","subscribeTouchEvents","unsubscribeTouchEvents","handleTouch","notouch","watchers","componentObj","Keybindings","watchKeys","pressedKeys","keyupBinding","keydownBinding","keybindings","mergedBindings","mapBindings","bindEvents","clearBindings","actions","mapBinding","symbolsList","ctrl","meta","code","checkBinding","ctrlKey","shiftKey","metaKey","navPrev","navNext","navUp","navDown","scrollPageUp","scrollPageDown","scrollToStart","scrollToEnd","copyToClipboard","keyBlock","newPos","scrollMax","navLeft","navRight","Menu","menuContainer","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","currentComponent","lookupMenuContainer","initializeRowWatchers","initializeGroupWatchers","checkMenuContainerIsParent","container","rowContextMenu","loadMenuEvent","on","rowClickMenu","groupContextMenu","groupClickMenu","headerContextMenu","loadMenuTableColumnEvent","headerClickMenu","headerMenu","initializeColumnHeaderMenu","contextMenu","loadMenuTableCellEvent","clickMenu","headerMenuEl","menu","loadMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","x","y","parentOffset","touches","pageX","pageY","MoveColumns","placeholderElement","createPlaceholderElement","hoverElement","checkTimeout","checkPeriod","moving","toCol","toColAfter","startX","autoScrollMargin","autoScrollStep","autoScrollTimeout","touchMove","moveHover","endMove","movableColumns","mousemove","which","startMove","bindTouchEvents","prevColWidth","nextColWidthLast","prevColWidthLast","startXMove","moveToCol","_bindMouseMove","movingCells","_unbindMouseMove","scrollPos","columnHolder","xPos","MoveRows","toRowAfter","hasHandle","startY","tableRowDropEvent","connectionSelectorsTables","connectionSelectorsElements","connectionElements","connectedTable","connectedRow","movableRowsConnectedTables","movableRowsConnectedElements","initializeCell","mouseup","tableRowDrop","previousSibling","rowHandle","nextRowHeight","prevRowHeight","nextRowHeightLast","prevRowHeightLast","startYMove","setStartPosition","connectToTables","pointerEvents","getTableElement","disconnectFromTables","moveHoverConnections","moveHoverTable","rowHolder","yPos","connectionTables","commsConnections","dropEvent","elementRowDrop","tabulatorElementDropEvent","sender","movableRowsSender","senders","movableRowsReceiver","receivers","connect","disconnect","dropComplete","fromTable","toTable","Mutator","enabled","transformCell","lookupMutator","mutators","mutatorEdit","pageSize","currentRow","currentPage","totalRows","totalPages","showingEl","valueEl","ofEl","totalEl","rowsEl","pages","Page","progressiveLoad","pageCounterElement","pageCounter","page","remoteRowCountEstimate","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","rowAddingPosition","initialLoadComplete","calculatePageSizes","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePageCounter","initializePaginator","initializeProgressive","scrollVertical","dispRows","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","counter","paginationCounter","pageCounters","hidden","pageSelectLabel","paginationCounterHolder","paginationElement","paginationCounterElement","paginationInitialPage","paginationButtonCount","trigger","leftSize","rightSize","_generatePageButton","setMaxRows","_setPageButtons","_setPageCounter","last_page","last_row","progressiveLoadDelay","footer","defaultPageCounters","local","id","localStorage","getItem","cookie","cookiePos","expireDate","setDate","getDate","toUTCString","Persistence","defWatcherBlock","readFunc","writeFunc","testKey","removeItem","persistence","retreivedData","persistenceMode","persistenceID","localStorageTest","persistenceReaderFunc","readers","persistenceWriterFunc","writers","retreiveData","save","eventSave","getColumnLayout","setColumnLayout","sorters","initialSort","parseColumns","mergeDefinition","getOwnPropertyDescriptor","defineProperty","set","oldCols","newCols","_findColumn","validateSorters","getSort","getGroupConfig","getPageConfig","excludedKeys","defStore","colDef","defaultReaders","defaultWriters","Print","manualBlock","printAsHtml","replaceTable","cleanup","printFullscreen","genereateTable","printConfig","printStyled","printRowRange","footerContent","scrollX","scrollY","footerEl","tableEl","printHeader","printFooter","printFormatter","scrollTo","ReactiveData","origFuncs","currentVersion","unblock","watchRow","watchData","unwatchData","version","enumerable","configurable","arg","getRowFromDataObject","startRow","oldRows","writable","watchKey","watchTreeChildren","childField","rebuildTree","ResizeColumns","startColumn","startWidth","prevHandle","layoutCellHandles","layoutColumnHeader","resizable","handleDown","nearestColumn","_checkResizability","_mouseDown","prevHandleDown","colIndex","mouseMove","checkCellHeights","mouseUp","ResizeRows","startHeight","screenY","ResizeTable","observer","containerObserver","tableHeight","containerWidth","autoResize","tableStyle","ResizeObserver","entry","nodeHeight","contentRect","nodeWidth","observe","tableResized","unobserve","ResponsiveLayout","hiddenColumns","collapseFormatter","collapseStartOpen","collapseHandleColumn","updateColumnVisibility","initializeResponsivity","responsiveLayoutCollapseFormatter","formatCollapsedData","responsiveLayoutCollapseStartOpen","order","generateCollapsedContent","generateCollapsedRowContent","colCount","working","getFlexBaseWidth","hideColumn","showColumn","generateCollapsedRowData","mockCellComponent","responsiveLayoutCollapseUseFormatters","node_content","titleData","valueData","titleHighlight","innerText","SelectRow","selecting","lastClickedRow","selectPrev","headerCheckboxElement","selectRows","deselectRows","getSelectedRows","getSelectedData","isRowSelected","selectable","clearSelectionData","rowRetrieve","selectablePersistence","_deselectRow","_rowSelectionChanged","endSelect","selected","selectableCheck","selectableRangeMode","_clearSelection","lastClickedRowIdx","rowIdx","fromRowIdx","toRowIdx","toggledRows","toggledRow","getCurrentCell","_selectRow","rowMatch","rowInfo","selectableRollingSelection","checkboxEl","dataTreeSelectPropagate","childRowSelection","selectedRow","aRow","bRow","alignEmptyValues","emptyAlign","decimalSeparator","thousandSeparator","string","langLocale","localeCompare","time","array","calc","d","alphanum","as","bs","a1","b1","L","rx","rd","isFinite","Sort","sortList","userSetSort","clearSort","sortMode","remoteSortParams","setSort","refreshSort","arrowEl","sorterParams","startingDir","headerSortStartingDir","headerSortTristate","headerSort","headerSortElement","columnHeaderSortMulti","newSortList","sortOrderReverse","sortListActual","rowComponents","clearColumnHeaders","sortObj","findSorter","setColumnHeader","_sortItems","sorterCount","sortItem","_sortRow","el1Comp","el2Comp","el1","el2","defaultSorters","parameters","numeric","starts","ends","minLength","maxLength","regex","unique","cellData","Validate","invalidCells","getInvalidCells","userClearCellValidation","userValidate","cellIsValid","clearValidation","columnValidate","rowValidate","validator","_extractValidator","substring","_buildValidator","validators","invalidIndex","defaultValidators","TabulatorFull"],"mappings":"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"}