{"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/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/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/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\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\"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\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.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.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.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\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 this.element.offsetHeight;\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\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();\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(){\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\tthis.setWidthActual(maxWidth + 1);\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.compatabilityCheck();\r\n\t}\r\n\t\r\n\tcompatabilityCheck(){\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 = 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++;\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\tif(!this.leftCol){\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\tthis.leftCol--;\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\trow.getElement().removeChild(cell.getElement());\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\trow.getElement().removeChild(el);\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\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.initialized = true;\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.render();\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 caluclation 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 becore continuing\r\n\t\tthis.redrawBlockRestoreConfig = false; //store latest redraw function calls for when redraw is needed\r\n\t\tthis.redrawBlockRederInPosition = 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-refeshed\");\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.redrawBlockRederInPosition = 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.redrawBlockRederInPosition){\r\n\t\t\t\tthis.reRenderInPosition();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.redrawBlockRederInPosition = 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\")){\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\tcomponent = targets[\"row\"].findCell(target);\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], Promise.resolve([]));\r\n\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\r\n\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\tthis.hideLoader();\r\n\t\t\t\t}, 3000);\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},\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//local data from local file\r\n\tsetDataFromLocalFile(extensions){\r\n\t\treturn new Promise((resolve, reject) => {\r\n\t\t\tvar input = document.createElement(\"input\");\r\n\t\t\tinput.type = \"file\";\r\n\t\t\tinput.accept = extensions || \".json,application/json\";\r\n\r\n\t\t\tinput.addEventListener(\"change\", (e) => {\r\n\t\t\t\tvar file = input.files[0],\r\n\t\t\t\treader = new FileReader(),\r\n\t\t\t\tdata;\r\n\r\n\t\t\t\treader.readAsText(file);\r\n\r\n\t\t\t\treader.onload = (e) => {\r\n\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tdata = JSON.parse(reader.result);\r\n\t\t\t\t\t} catch(e) {\r\n\t\t\t\t\t\tconsole.warn(\"File Load Error - File contents is invalid JSON\", e);\r\n\t\t\t\t\t\treject(e);\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setData(data)\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})\r\n\t\t\t\t\t.catch((err) => {\r\n\t\t\t\t\t\tresolve(err);\r\n\t\t\t\t\t});\r\n\t\t\t\t};\r\n\r\n\t\t\t\treader.onerror = (e) => {\r\n\t\t\t\t\tconsole.warn(\"File Load Error - Unable to read file\");\r\n\t\t\t\t\treject();\r\n\t\t\t\t};\r\n\t\t\t});\r\n\r\n\t\t\tinput.click();\r\n\t\t});\r\n\t}\r\n\r\n\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\tcolumnMaxWidth:false, //minimum global width for a column\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\r\n\tdataSendParams:{},\r\n\r\n\tdataReceiveParams:{},\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\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.config = false; //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\r\n\t\tthis.loaderPromise = false;\r\n\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\r\n\t\tthis.registerTableOption(\"ajaxRequesting\", function(){});\r\n\t\tthis.registerTableOption(\"ajaxResponse\", false);\r\n\r\n\t\tthis.contentTypeFormatters = Ajax.contentTypeFormatters;\r\n\t}\r\n\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\r\n\t\tif(this.table.options.ajaxParams){\r\n\t\t\tthis.setParams(this.table.options.ajaxParams);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.ajaxConfig){\r\n\t\t\tthis.setConfig(this.table.options.ajaxConfig);\r\n\t\t}\r\n\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\t\tthis.registerTableFunction(\"getAjaxUrl\", this.getUrl.bind(this));\r\n\r\n\t\tthis.subscribe(\"data-loading\", this.requestDataCheck.bind(this));\r\n\t\tthis.subscribe(\"data-load\", this.requestData.bind(this));\r\n\t}\r\n\r\n\r\n\trequestDataCheck(data, params, config, silent){\r\n\t\treturn !!((!data && this.url) || typeof data === \"string\");\r\n\t}\r\n\r\n\trequestData(data, params, config, silent, previousData){\r\n\t\tif(this.requestDataCheck(data)){\r\n\t\t\tif(data){\r\n\t\t\t\tthis.setUrl(data);\r\n\t\t\t}\r\n\r\n\t\t\tif(params){\r\n\t\t\t\tthis.setParams(params, true);\r\n\t\t\t}\r\n\r\n\t\t\tif(config){\r\n\t\t\t\tthis.setConfig(config);\r\n\t\t\t}\r\n\r\n\t\t\treturn this.sendRequest();\r\n\t\t}else{\r\n\t\t\treturn previousData;\r\n\t\t}\r\n\t}\r\n\r\n\t//set ajax params\r\n\tsetParams(params, update){\r\n\t\tif(update){\r\n\t\t\tthis.params = this.params || {};\r\n\r\n\t\t\tfor(let key in params){\r\n\t\t\t\tthis.params[key] = params[key];\r\n\t\t\t}\r\n\t\t}else{\r\n\t\t\tthis.params = params;\r\n\t\t}\r\n\t}\r\n\r\n\tgetParams(){\r\n\t\treturn this.params || {};\r\n\t}\r\n\r\n\t//load config object\r\n\tsetConfig(config){\r\n\t\tthis._loadDefaultConfig();\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\tfor(let key in config){\r\n\t\t\t\tthis.config[key] = config[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//create config object from default\r\n\t_loadDefaultConfig(force){\r\n\t\tif(!this.config || force){\r\n\r\n\t\t\tthis.config = {};\r\n\r\n\t\t\t//load base config from defaults\r\n\t\t\tfor(let key in Ajax.defaultConfig){\r\n\t\t\t\tthis.config[key] = Ajax.defaultConfig[key];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t//set request url\r\n\tsetUrl(url){\r\n\t\tthis.url = url;\r\n\t}\r\n\r\n\t//get request url\r\n\tgetUrl(){\r\n\t\treturn this.url;\r\n\t}\r\n\r\n\t//send ajax request\r\n\tsendRequest(silent){\r\n\t\tvar url = this.url,\r\n\t\tesc, query;\r\n\r\n\t\tthis._loadDefaultConfig();\r\n\r\n\t\tif(this.table.options.ajaxRequesting.call(this.table, this.url, this.params) !== false){\r\n\t\t\treturn this.loaderPromise(url, this.config, this.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, this.url, this.params, data);\r\n\t\t\t\t}\r\n\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-refeshed\", 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}\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\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\n\r\nexport default {\r\n\tcsv:csv,\r\n\tjson:json,\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.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\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));\r\n\t\tthis.subscribe(\"keybinding-nav-next\", this.keybindingNavigateNext.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-left\", this.navigateLeft.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-right\", this.navigateRight.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-up\", this.navigateUp.bind(this));\r\n\t\tthis.subscribe(\"keybinding-nav-down\", this.navigateDown.bind(this));\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(e)){\r\n\t\t\t\tif(newRow){\r\n\t\t\t\t\tcell.getElement().firstChild.blur();\r\n\r\n\t\t\t\t\tif(newRow === true){\r\n\t\t\t\t\t\tnewRow = this.table.addRow({})\r\n\t\t\t\t\t}else{\r\n\t\t\t\t\t\tif(typeof newRow == \"function\"){\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(newRow(cell.row.getComponent()))\r\n\t\t\t\t\t\t}else{\r\n\t\t\t\t\t\t\tnewRow = this.table.addRow(Object.assign({}, newRow));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tnewRow.then(() => {\r\n\t\t\t\t\t\tsetTimeout(() => {\r\n\t\t\t\t\t\t\tnav.next();\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.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.modules.edit.clearEdited(cell._getSelf());\r\n\t\t});\r\n\t}\r\n\r\n\tnavigatePrev(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, 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(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tnextCell, 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(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, 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(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, 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(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, 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(e){\r\n\t\tvar cell = this.currentCell,\r\n\t\tindex, 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\tconsole.log(\"clear\", cancel, cell, cell.validate)\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;","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) : 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 = 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\tvar newDatetime = 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\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\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.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 dblTap,\ttapHold, tap, toggleElement;\r\n\r\n\t\tif ((this.groupManager.table.options.groupContextMenu || this.groupManager.table.options.groupClickMenu) && this.groupManager.table.modExists(\"menu\")){\r\n\t\t\tthis.groupManager.table.modules.menu.initializeGroup.call(this.groupManager.table.modules.menu, this);\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTap){\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\tthis.groupManager.table.options.groupTap(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 (this.groupManager.table.options.groupDblTap){\r\n\t\t\tdblTap = null;\r\n\r\n\t\t\tthis.element.addEventListener(\"touchend\", (e) => {\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\tthis.groupManager.table.options.groupDblTap(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\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.groupManager.table.options.groupTapHold){\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(() => {\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\tthis.groupManager.table.options.groupTapHold(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\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\tthis.configureGroupSetup();\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(\"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 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}\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\r\n\t\t\tfor(let key in Keybindings.bindings){\r\n\t\t\t\tmergedBindings[key] = Keybindings.bindings[key];\r\n\t\t\t}\r\n\r\n\t\t\tif(Object.keys(bindings).length){\r\n\r\n\t\t\t\tfor(let key in bindings){\r\n\t\t\t\t\tmergedBindings[key] = bindings[key];\r\n\t\t\t\t}\r\n\t\t\t}\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\tthis.mapBinding(key, binding);\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 = 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\",\r\n\tredo:\"ctrl + 89\",\r\n\tcopyToClipboard:\"ctrl + 67\",\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\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\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\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\r\n\t\tthis.registerColumnOption(\"headerContextMenu\");\r\n\t\tthis.registerColumnOption(\"headerMenu\");\r\n\t\tthis.registerColumnOption(\"contextMenu\");\r\n\t\tthis.registerColumnOption(\"clickMenu\");\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(\"row-init\", this.initializeRow.bind(this));\r\n\t}\r\n\r\n\tlayoutCell(cell){\r\n\t\tif(cell.column.definition.contextMenu || cell.column.definition.clickMenu){\r\n\t\t\tthis.initializeCell(cell);\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\tif(def.headerContextMenu || def.headerClickMenu || def.headerMenu){\r\n\t\t\tthis.initializeColumnHeader(column);\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeColumnHeader(column){\r\n\t\tvar headerMenuEl;\r\n\r\n\t\tif(column.definition.headerContextMenu){\r\n\t\t\tcolumn.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, column, column.definition.headerContextMenu));\r\n\t\t\tthis.tapHold(column, column.definition.headerContextMenu);\r\n\t\t}\r\n\r\n\t\t// if(column.definition.headerClickMenu){\r\n\t\t// \tcolumn.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, column, column.definition.headerClickMenu));\r\n\t\t// }\r\n\r\n\t\tif(column.definition.headerMenu){\r\n\r\n\t\t\theaderMenuEl = document.createElement(\"span\");\r\n\t\t\theaderMenuEl.classList.add(\"tabulator-header-menu-button\");\r\n\t\t\theaderMenuEl.innerHTML = \"⋮\";\r\n\r\n\t\t\theaderMenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\t\te.stopPropagation();\r\n\t\t\t\te.preventDefault();\r\n\r\n\t\t\t\tthis.LoadMenuEvent(column, column.definition.headerMenu, e);\r\n\t\t\t});\r\n\r\n\t\t\tcolumn.titleElement.insertBefore(headerMenuEl, column.titleElement.firstChild);\r\n\t\t}\r\n\t}\r\n\r\n\tLoadMenuEvent(component, menu, e){\r\n\t\tmenu = typeof menu == \"function\" ? menu.call(this.table, component.getComponent(), e) : menu;\r\n\r\n\t\t// if(component instanceof Cell){\r\n\t\t// \te.stopImmediatePropagation();\r\n\t\t// }\r\n\r\n\t\tthis.loadMenu(e, component, menu);\r\n\t}\r\n\r\n\ttapHold(component, menu){\r\n\t\tvar element = component.getElement(),\r\n\t\ttapHold = null,\r\n\t\tloaded = false;\r\n\r\n\t\telement.addEventListener(\"touchstart\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\tloaded = false;\r\n\r\n\t\t\ttapHold = setTimeout(() => {\r\n\t\t\t\tclearTimeout(tapHold);\r\n\t\t\t\ttapHold = null;\r\n\t\t\t\tloaded = true;\r\n\r\n\t\t\t\tthis.LoadMenuEvent(component, menu, e);\r\n\t\t\t}, 1000);\r\n\r\n\t\t}, {passive: true});\r\n\r\n\t\telement.addEventListener(\"touchend\", (e) => {\r\n\t\t\tclearTimeout(tapHold);\r\n\t\t\ttapHold = null;\r\n\r\n\t\t\tif(loaded){\r\n\t\t\t\te.preventDefault();\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\tinitializeCell(cell){\r\n\t\tif(cell.column.definition.contextMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.contextMenu));\r\n\t\t\tthis.tapHold(cell, cell.column.definition.contextMenu);\r\n\t\t}\r\n\r\n\t\tif(cell.column.definition.clickMenu){\r\n\t\t\tcell.getElement(true).addEventListener(\"click\", this.LoadMenuEvent.bind(this, cell, cell.column.definition.clickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeRow(row){\r\n\t\tif(this.table.options.rowContextMenu){\r\n\t\t\trow.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, row, this.table.options.rowContextMenu));\r\n\t\t\tthis.tapHold(row, this.table.options.rowContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.rowClickMenu){\r\n\t\t\trow.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, row, this.table.options.rowClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tinitializeGroup (group){\r\n\t\tif(this.table.options.groupContextMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"contextmenu\", this.LoadMenuEvent.bind(this, group, this.table.options.groupContextMenu));\r\n\t\t\tthis.tapHold(group, this.table.options.groupContextMenu);\r\n\t\t}\r\n\r\n\t\tif(this.table.options.groupClickMenu){\r\n\t\t\tgroup.getElement().addEventListener(\"click\", this.LoadMenuEvent.bind(this, group, this.table.options.groupClickMenu));\r\n\t\t}\r\n\t}\r\n\r\n\tloadMenu(e, component, menu, parentEl){\r\n\r\n\t\tvar touch = !(e instanceof MouseEvent);\r\n\r\n\t\tvar menuEl = document.createElement(\"div\");\r\n\t\tmenuEl.classList.add(\"tabulator-menu\");\r\n\r\n\t\tif(!touch){\r\n\t\t\te.preventDefault();\r\n\t\t}\r\n\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\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\r\n\t\t\tthis.hideMenu();\r\n\t\t\tthis.menuElements = [];\r\n\t\t}\r\n\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\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\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\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\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\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\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\r\n\t\t\tmenuEl.appendChild(itemEl);\r\n\t\t});\r\n\r\n\t\tmenuEl.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.hideMenu();\r\n\t\t});\r\n\r\n\t\tthis.menuElements.push(menuEl);\r\n\t\tthis.positionMenu(menuEl, parentEl, touch, e);\r\n\t}\r\n\r\n\thideOldSubMenus(menuEl){\r\n\t\tvar index = this.menuElements.indexOf(menuEl);\r\n\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\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\r\n\t\t\t\tthis.menuElements.pop();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\tpositionMenu(element, parentEl, touch, e){\r\n\t\tvar docHeight = Math.max(document.body.offsetHeight, window.innerHeight),\r\n\t\tx, y, parentOffset;\r\n\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\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\r\n\t\telement.style.top = y + \"px\";\r\n\t\telement.style.left = x + \"px\";\r\n\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\r\n\t\tdocument.body.appendChild(element);\r\n\r\n\t\t//move menu to start on bottom edge if it is too close to the edge of the screen\r\n\t\tif((y + element.offsetHeight) >= docHeight){\r\n\t\t\telement.style.top = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.bottom = (docHeight - parentOffset.top - parentEl.offsetHeight - 1) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.bottom = (docHeight - y) + \"px\";\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t//move menu to start on right edge if it is too close to the edge of the screen\r\n\t\tif((x + element.offsetWidth) >= document.body.offsetWidth || this.positionReversedX){\r\n\t\t\telement.style.left = \"\";\r\n\r\n\t\t\tif(parentEl){\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - parentOffset.left) + \"px\";\r\n\t\t\t}else{\r\n\t\t\t\telement.style.right = (document.documentElement.offsetWidth - x) + \"px\";\r\n\t\t\t}\r\n\r\n\t\t\tthis.positionReversedX = true;\r\n\t\t}\r\n\t}\r\n\r\n\tisOpen(){\r\n\t\treturn !!this.menuElements.length;\r\n\t}\r\n\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\r\n\thideMenu(){\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\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}\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.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}\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 Module from '../../core/Module.js';\r\n\r\nimport Helpers from '../../core/tools/Helpers.js';\r\n\r\nclass Page extends Module{\r\n\r\n\tconstructor(table){\r\n\t\tsuper(table);\r\n\r\n\t\tthis.mode = \"local\";\r\n\t\tthis.progressiveLoad = false;\r\n\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.displayIndex = 0; //index in display pipeline\r\n\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\r\n\t\tthis.pageSizes = [];\r\n\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(\"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\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\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\r\n\t\t//register component functions\r\n\t\tthis.registerComponentFunction(\"row\", \"pageTo\", this.setPageToRow.bind(this));\r\n\t}\r\n\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\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\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\r\n\t\t\tthis.registerDisplayHandler(this.restOnRenderBefore.bind(this), 40);\r\n\t\t\tthis.registerDisplayHandler(this.getRows.bind(this), 50);\r\n\r\n\t\t\tthis.createElements();\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\r\n\t\t\tthis.initializeProgressive(this.table.options.progressiveLoad)\r\n\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\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\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\r\n\t\treturn {index, top}\r\n\t}\r\n\r\n\tcalculatePageSizes(){\r\n\t\tvar testElRow, testElCell;\r\n\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\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\r\n\t\t\ttestElRow.appendChild(testElCell);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().appendChild(testElRow);\r\n\r\n\t\t\tthis.size = Math.floor(this.table.rowManager.getElement().clientHeight / testElRow.offsetHeight);\r\n\r\n\t\t\tthis.table.rowManager.getTableElement().removeChild(testElRow);\r\n\t\t}\r\n\r\n\t\tthis.generatePageSizeSelectList();\r\n\t}\r\n\r\n\tinitialLoadComplete(){\r\n\t\tthis.initialLoad = false;\r\n\t}\r\n\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\r\n\t\t//configure request params\r\n\t\tparams.page = this.page;\r\n\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\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\tuserSetPageToRow(row){\r\n\t\tif(this.table.options.pagination){\r\n\t\t\trow = this.rowManager.findRow(row);\r\n\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\r\n\t\treturn Promise.reject();\r\n\t}\r\n\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\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\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\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\r\n\t\treturn rows;\r\n\t}\r\n\r\n\trowsUpdated(){\r\n\t\tthis.refreshData(true, \"all\");\r\n\t}\r\n\r\n\tcreateElements(){\r\n\t\tvar button;\r\n\r\n\t\tthis.element = document.createElement(\"span\");\r\n\t\tthis.element.classList.add(\"tabulator-paginator\");\r\n\r\n\t\tthis.pagesElement = document.createElement(\"span\");\r\n\t\tthis.pagesElement.classList.add(\"tabulator-pages\");\r\n\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\r\n\t\tthis.firstBut = button.cloneNode(true);\r\n\t\tthis.firstBut.setAttribute(\"data-page\", \"first\");\r\n\r\n\t\tthis.prevBut = button.cloneNode(true);\r\n\t\tthis.prevBut.setAttribute(\"data-page\", \"prev\");\r\n\r\n\t\tthis.nextBut = button.cloneNode(true);\r\n\t\tthis.nextBut.setAttribute(\"data-page\", \"next\");\r\n\r\n\t\tthis.lastBut = button.cloneNode(true);\r\n\t\tthis.lastBut.setAttribute(\"data-page\", \"last\");\r\n\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\r\n\tgeneratePageSizeSelectList(){\r\n\t\tvar pageSizes = [];\r\n\r\n\t\tif(this.pageSizeSelect){\r\n\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\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\r\n\t\t\t\tif(this.pageSizes.indexOf(this.size) == -1){\r\n\t\t\t\t\tpageSizes = [];\r\n\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\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\r\n\t\t\twhile(this.pageSizeSelect.firstChild) this.pageSizeSelect.removeChild(this.pageSizeSelect.firstChild);\r\n\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\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\r\n\r\n\r\n\t\t\t\tthis.pageSizeSelect.appendChild(itemEl);\r\n\t\t\t});\r\n\r\n\t\t\tthis.pageSizeSelect.value = this.size;\r\n\t\t}\r\n\t}\r\n\r\n\t//setup pageination\r\n\tinitializePaginator(hidden){\r\n\t\tvar pageSelectLabel;\r\n\r\n\t\tif(!hidden){\r\n\t\t\t//build pagination element\r\n\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\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\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\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\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\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\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\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\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\r\n\t\t\tthis.prevBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.previousPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.nextBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.nextPage()\r\n\t\t\t});\r\n\r\n\t\t\tthis.lastBut.addEventListener(\"click\", () => {\r\n\t\t\t\tthis.setPage(this.max)\r\n\t\t\t});\r\n\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\r\n\t\t\tif(this.pageSizeSelect){\r\n\t\t\t\tpageSelectLabel = document.createElement(\"label\");\r\n\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\r\n\t\t\t\tthis.element.appendChild(pageSelectLabel);\r\n\t\t\t\tthis.element.appendChild(this.pageSizeSelect);\r\n\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\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\r\n\t\t\tif(!this.table.options.paginationElement && !hidden){\r\n\t\t\t\tthis.table.footerManager.append(this.element, this);\r\n\t\t\t}\r\n\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\r\n\t\t//set default values\r\n\t\tthis.mode = this.table.options.paginationMode;\r\n\t}\r\n\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\r\n\ttrackChanges(){\r\n\t\tthis.dispatch(\"page-changed\");\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\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\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\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\r\n\t//set the maximum page\r\n\tsetMaxPage(max){\r\n\r\n\t\tmax = parseInt(max);\r\n\r\n\t\tthis.max = max || 1;\r\n\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\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\r\n\t\t\tcase \"prev\":\r\n\t\t\treturn this.previousPage();\r\n\t\t\tbreak;\r\n\r\n\t\t\tcase \"next\":\r\n\t\t\treturn this.nextPage();\r\n\t\t\tbreak;\r\n\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\r\n\r\n\t\tpage = parseInt(page);\r\n\r\n\t\tif((page > 0 && page <= this.max) || this.mode !== \"local\"){\r\n\t\t\tthis.page = page;\r\n\r\n\t\t\tthis.trackChanges();\r\n\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\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\r\n\t\tif(index > -1){\r\n\t\t\tvar page = this.size === true ? 1 : Math.ceil((index + 1) / this.size);\r\n\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\r\n\tsetPageSize(size){\r\n\t\tif(size !== true){\r\n\t\t\tsize = parseInt(size);\r\n\t\t}\r\n\r\n\t\tif(size > 0){\r\n\t\t\tthis.size = size;\r\n\t\t}\r\n\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\r\n\t\tthis.trackChanges();\r\n\t}\r\n\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\r\n\t\twhile(this.pagesElement.firstChild) this.pagesElement.removeChild(this.pagesElement.firstChild);\r\n\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\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\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\r\n\t\tthis.footerRedraw();\r\n\t}\r\n\r\n\t_generatePageButton(page){\r\n\t\tvar button = document.createElement(\"button\");\r\n\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\r\n\t\tbutton.setAttribute(\"type\", \"button\");\r\n\t\tbutton.setAttribute(\"role\", \"button\");\r\n\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\r\n\t\tbutton.setAttribute(\"data-page\", page);\r\n\t\tbutton.textContent = page;\r\n\r\n\t\tbutton.addEventListener(\"click\", (e) => {\r\n\t\t\tthis.setPage(page)\r\n\t\t});\r\n\r\n\t\treturn button;\r\n\t}\r\n\r\n\t//previous page\r\n\tpreviousPage(){\r\n\t\tif(this.page > 1){\r\n\t\t\tthis.page--;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger()\r\n\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\r\n\t//next page\r\n\tnextPage(){\r\n\t\tif(this.page < this.max){\r\n\t\t\tthis.page++;\r\n\r\n\t\t\tthis.trackChanges();\r\n\r\n\t\t\treturn this.trigger();\r\n\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\r\n\t//return current page number\r\n\tgetPage(){\r\n\t\treturn this.page;\r\n\t}\r\n\r\n\t//return max page number\r\n\tgetPageMax(){\r\n\t\treturn this.max;\r\n\t}\r\n\r\n\tgetPageSize(size){\r\n\t\treturn this.size;\r\n\t}\r\n\r\n\tgetMode(){\r\n\t\treturn this.mode;\r\n\t}\r\n\r\n\t//return appropriate rows for current page\r\n\tgetRows(data){\r\n\t\tvar output, start, end;\r\n\r\n\t\tif(this.mode == \"local\"){\r\n\t\t\toutput = [];\r\n\r\n\t\t\tthis.setMaxRows(data.length);\r\n\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\r\n\r\n\t\t\tthis._setPageButtons();\r\n\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\treturn output;\r\n\t\t}else{\r\n\t\t\tthis._setPageButtons();\r\n\r\n\t\t\treturn data.slice(0);\r\n\t\t}\r\n\t}\r\n\r\n\ttrigger(){\r\n\t\tvar left;\r\n\r\n\t\tswitch(this.mode){\r\n\t\t\tcase \"local\":\r\n\t\t\tleft = this.table.rowManager.scrollLeft;\r\n\r\n\t\t\tthis.refreshData();\r\n\t\t\tthis.table.rowManager.scrollHorizontal(left);\r\n\r\n\t\t\tthis.dispatchExternal(\"pageLoaded\", this.getPage());\r\n\r\n\t\t\treturn Promise.resolve();\r\n\t\t\tbreak;\r\n\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\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\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\r\n\t_parseRemoteData(data){\r\n\t\tvar left, data, margin;\r\n\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\r\n\t\tif(data.data){\r\n\t\t\tthis.max = parseInt(data.last_page) || 1;\r\n\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\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\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\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\r\n\t\t\t\t\tthis.table.rowManager.setData(data, this.page !== 1, this.page == 1);\r\n\r\n\t\t\t\t\tmargin = this.table.options.progressiveLoadScrollMargin || (this.table.rowManager.element.clientHeight * 2);\r\n\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\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\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\r\n\t\treturn data.data;\r\n\t}\r\n\r\n\t//handle the footer element being redrawn\r\n\tfooterRedraw(){\r\n\t\tvar footer = this.table.footerManager.element;\r\n\r\n\t\tif((Math.ceil(footer.clientWidth) - footer.scrollWidth) < 0){\r\n\t\t\tthis.pagesElement.style.display = 'none';\r\n\t\t}else{\r\n\t\t\tthis.pagesElement.style.display = '';\r\n\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\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\tthis.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 = DT.fromFormat(String(a), format);\r\n\t\tb = 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(function(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(function(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(function(row){\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(function(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(function(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","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","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","titleFormatterRendered","mapDefinitions","setField","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","Promise","resolve","reject","_this9","cellCount","deregisterColumn","findColumnIndex","_nextVisibleColumn","getColumnByIndex","_prevVisibleColumn","force","fitToData","clearWidth","error","assign","addColumn","then","_this10","defaultOptions","Helpers","box","getBoundingClientRect","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","compatabilityCheck","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","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","call","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","render","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","ceil","rowHeight","fillableSpace","addedRows","paddingAdjust","_quickNormalizeRowHeight","removableRows","RowManager","createHolderElement","createTableElement","heightFixer","firstRender","renderMode","fixedHeight","activeRowsPipeline","activeRows","activeRowsCount","displayRows","displayRowsCount","redrawBlockRestoreConfig","redrawBlockRederInPosition","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","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","extensions","input","accept","file","files","reader","FileReader","readAsText","onload","err","onerror","click","blockActiveLoad","clearData","getDataCount","responses","addRows","newRows","getRowFromPosition","foundRows","fromRow","getDefinitionTree","fromColumn","plugin","required","columnMaxWidth","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","ajaxParams","setParams","ajaxConfig","setConfig","ajaxURL","setUrl","getUrl","requestDataCheck","requestData","previousData","sendRequest","_loadDefaultConfig","method","defaultConfig","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","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","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","maskInput","mask","maskLetter","maskLetterChar","maskNumber","maskNumberChar","maskWildcard","maskWildcardChar","fillSymbols","symbol","char","keyCode","maskAutoFill","defaultDownloaders","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","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","nav","next","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","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","groupContextMenu","groupClickMenu","menu","initializeGroup","groupTap","groupDblTap","groupTapHold","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","configureGroupSetup","groupUpdateOnCellEdit","cellUpdated","reassignRowToGroup","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","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","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","menuElements","blurEvent","hideMenu","escEvent","escMenu","nestedMenuBlock","positionReversedX","contextMenu","clickMenu","initializeCell","headerContextMenu","headerClickMenu","headerMenu","initializeColumnHeader","headerMenuEl","LoadMenuEvent","loadMenu","rowContextMenu","rowClickMenu","touch","MouseEvent","menuEl","itemEl","disabled","hideOldSubMenus","positionMenu","pop","x","y","parentOffset","docHeight","innerHeight","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","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","Page","progressiveLoad","page","initialLoad","dataChanging","pageSizes","setMaxPage","setPage","userSetPageToRow","userSetPageSize","getPageSize","previousPage","nextPage","getPage","getPageMax","setPageToRow","rowAddingPosition","initialLoadComplete","calculatePageSizes","paginationMode","remotePageParams","_parseRemoteData","restOnRenderBefore","initializePaginator","initializeProgressive","scrollVertical","dispRows","testElRow","testElCell","paginationSize","generatePageSizeSelectList","setPageSize","progressiveLoadScrollMargin","pagesElement","firstBut","prevBut","nextBut","lastBut","paginationSizeSelector","pageSizeSelect","hidden","pageSelectLabel","paginationElement","paginationInitialPage","paginationButtonCount","trigger","leftSize","rightSize","_generatePageButton","setMaxRows","_setPageButtons","last_page","progressiveLoadDelay","footer","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","getColumns","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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"}