{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-eventsourcing/src/components/widgets/lively-table.js"],"names":["aexpr","Morph","ContextMenu","DragBehavior","_","LivelyTable","create","createElement","initialize","addEventListener","evt","onClick","setAttribute","onMouseDown","onCopy","onCut","onPaste","onFocus","onFocusout","onExtentChanged","onContextMenu","isCell","cell","isEditingCells","activeElement","allParents","rows","from","querySelectorAll","column","indexOrLabel","index","isInteger","headers","undefined","cells","row","ea","cellsIn","cellAt","columnIndex","rowIndex","columnOfCell","rowOfCell","initailizeCells","element","rowCells","keyForCell","asArray","selectCell","multipleSelection","indexOf","map","selectCellPrivate","dispatchEvent","CustomEvent","addSelectedCell","selectRow","multiselection","clearSelection","selectColumn","changeSelection","columnDelta","rowDelta","removeSelection","columnA","columnB","rowA","rowB","changeSelectionBetween","columnMin","min","columnMax","max","rowMin","rowMax","removeSelectedCell","detail","table","navigateRelative","newCell","setTextSelectionOfCellContents","range","createRange","sel","getSelection","setStart","i","textContent","length","e","collapse","removeAllRanges","addRange","clearAllSelection","removeAttribute","doNotClearStart","stopPropagation","preventDefault","menu","insertColumnAt","removeColumnAt","insertRowAt","removeRowAt","openIn","document","get","setWidth","getExtent","setHeight","sleep","isInFocus","setFocusAndTextSelection","focus","onEnterDown","wasEditing","isInEditing","stopEditingCurrentCell","startEditingCurrentCell","onEscDown","handleArrowKey","deltaColumn","deltaRow","onLeftDown","onRightDown","onUpDown","onDownDown","composedPath","onMouseMoveSelection","onMouseUpSelection","removeEventListener","data","getSelectionAsCSV","selString","baseRow","baseColumn","setCellExpression","moveRelativeReferencesInCode","setFromCSVat","deactivateAllExpressions","registerOnAllCells","moveReferencesAfter","moveColumns","isInsertion","delta","rewrittenCode","moveReferencesInCode","code","replace","ref","absoluteOrRelative","columnIndexToDigit","columnOffset","rowOffset","log","cellArray","oldCell","remove","focusedElement","lively","oldRow","newRow","eaRow","eaCell","asCSV","join","asJSO","all","header","slice","obj","forEach","name","currentRowToJSO","rowToJSO","rowContents","jso","maxColumnsIn","array","reduce","sum","setFromArrayClean","maxColumns","html","setEmptyWithSize","width","height","setFromArray","force","querySelector","filter","setFromArrayAt","tableLength","appendChild","rowElement","push","fromRow","j","Error","splitIntoRows","csv","separator","split","line","m","match","setFromCSV","setFromJSO","clean","keys","key","unshift","copySelectionAsTable","tmp","values","groupBy","sortBy","getSelectionAsJSO","result","each","livelyMigrate","other","selection","livelyExample","getCellValue","val","ae","dispose","registerCellForActivityChanges","expression","onChange","isActive","cellChangedActive","text","substring","value","evaluateCellText","inactiveExpression","getCurrentValue","isDisposed","expressionCode","onChangeCode","newValue","eval","isError","evaluateToCurrentValue","CellReferenceRegex","params","cellFromCode","a","toUpperCase","charCodeAt","fromCharCode","floor"],"mappings":"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","file":"lively-table.js","sourcesContent":["\"enable aexpr\";\n\nimport Morph from 'src/components/widgets/lively-morph.js';\nimport ContextMenu from 'src/client/contextmenu.js';\nimport DragBehavior from \"src/client/morphic/dragbehavior.js\";\nimport aexpr from 'active-expression-rewriting';\nimport _ from 'src/external/lodash/lodash.js';\n\nexport default class LivelyTable extends Morph {\n\n  static create() {\n    // return Object.create(LivelyTable.prototype, {})\n    return document.createElement(\"lively-table\");\n  }\n\n  initialize() {\n    this.addEventListener(\"click\", evt => this.onClick(evt));\n    this.setAttribute(\"tabindex\", 0);\n    lively.html.registerKeys(this, \"Table\");\n    this.addEventListener(\"mousedown\", evt => this.onMouseDown(evt));\n    \n    this.addEventListener(\"copy\", evt => this.onCopy(evt));\n    this.addEventListener(\"cut\", evt => this.onCut(evt));\n    this.addEventListener(\"paste\", evt => this.onPaste(evt));\n\n    this.addEventListener(\"focus\", evt => this.onFocus(evt));\n    this.addEventListener(\"focusout\", evt => this.onFocusout(evt));\n\n    this.addEventListener(\"extent-changed\", evt => this.onExtentChanged(evt));\n    this.addEventListener('contextmenu', evt => this.onContextMenu(evt), false);\n\n    this.activityChangeExpressions = [];\n  }\n\n  /*MD ## Rows, Columns, Cells MD*/\n\n  isCell(cell) {\n    return cell.tagName == \"TD\" || cell.tagName == \"TH\";\n  }  \n  \n  isEditingCells() {\n    var activeElement = lively.activeElement()\n    return activeElement && activeElement.contentEditable && lively.allParents(activeElement, [], true).includes(this)\n  }\n\n  rows() {\n    return Array.from(this.querySelectorAll(\"tr\"));\n  }\n\n  column(indexOrLabel) {\n    var index;\n    if (Number.isInteger(indexOrLabel)) {\n      index = indexOrLabel;\n    } else {\n      index = this.headers().indexOf(indexOrLabel);\n      if (index == -1) return undefined;\n    }\n    return this.cells().map(row => row[index]);\n  }\n\n  cells() {\n    return this.rows().map(ea => this.cellsIn(ea));\n  }\n\n  cellsIn(row) {\n    return Array.from(row.querySelectorAll(\"td,th\"));\n  }\n\n  cellAt(columnIndex, rowIndex) {\n    var row = this.rows()[rowIndex];\n    if (!row) return undefined;\n    return row.querySelectorAll(\"td,th\")[columnIndex];\n  }\n\n  columnOfCell(cell) {\n    return this.cellsIn(cell.parentElement).indexOf(cell);\n  }\n\n  rowOfCell(cell) {\n    var row = cell.parentElement;\n    return this.rows().indexOf(row);\n  }\n\n  // #private\n  initailizeCells(element) {\n    let rows = this.rows(),\n        row = element.parentElement,\n        rowCells = this.cellsIn(row);\n    return {\n      rows,\n      row,\n      rowCells\n    };\n  }\n\n  keyForCell(cell) {\n    return this.cells()[0][this.columnOfCell(cell)].textContent;\n  }\n\n  headers() {\n    return this.asArray()[0];\n  }\n  /*MD ## Selection MD*/\n\n  selectCell(element, multipleSelection) {\n    if (!this.isCell(element)) return;\n    if (this.currentCell && this.currentCell != element) {\n      this.currentCell.contentEditable = false;\n      if (!multipleSelection) this.currentCell.classList.remove(\"table-selected\");\n    }\n    if (!element.parentElement) return; // cell must be one of mine\n\n    this.currentCell = element;\n    const {\n      rows,\n      row,\n      rowCells\n    } = this.initailizeCells(element);\n\n    if (this.currentRow) {\n      this.currentRow.classList.remove('current');\n    }\n    this.currentRow = row;\n    this.currentRow.classList.add('current');\n\n    this.currentRowIndex = rows.indexOf(row);\n    this.currentColumnIndex = rowCells.indexOf(element);\n    this.currentColumn = rows.map(ea => ea[this.currentColumnIndex]);\n\n    this.selectCellPrivate(multipleSelection, rows, row, rowCells, element);\n\n    this.dispatchEvent(new CustomEvent(\"cell-selected\"));\n  }\n\n  // #private\n  selectCellPrivate(multipleSelection, rows, row, rowCells, element) {\n    if (multipleSelection) {\n      this.addSelectedCell(this.currentCell);\n    } else {\n      if (this.selectedCells) this.selectedCells.forEach(ea => {\n        ea.classList.remove(\"start-selection\");\n        ea.classList.remove(\"table-selected\");\n      });\n      this.selectedCells = [this.currentCell];\n      this.currentCell.classList.add(\"table-selected\");\n      this.startCell = this.currentCell;\n      this.startRowIndex = rows.indexOf(row);\n      this.startColumnIndex = rowCells.indexOf(element);\n      this.startCell.classList.add(\"start-selection\");\n    }\n  }\n\n  selectRow(rowIndex, multiselection) {\n    if (!multiselection) {\n      this.clearSelection();\n    }\n    this.cells()[rowIndex].forEach(cell => {\n      this.selectCell(cell, true);\n    });\n  }\n\n  selectColumn(columnIndex, multiselection) {\n    if (!multiselection) {\n      this.clearSelection();\n    }\n    this.cells().forEach(row => {\n      this.selectCell(row[columnIndex], true);\n    });\n  }\n\n  changeSelection(columnDelta, rowDelta, removeSelection) {\n    let columnA = this.startColumnIndex,\n        columnB = this.currentColumnIndex + columnDelta,\n        rowA = this.startRowIndex,\n        rowB = this.currentRowIndex + rowDelta;\n    this.changeSelectionBetween(columnA, columnB, rowA, rowB, removeSelection);\n  }\n\n  changeSelectionBetween(columnA, columnB, rowA, rowB, removeSelection) {\n    var cells = this.cells(),\n        columnMin = Math.min(columnA, columnB),\n        columnMax = Math.max(columnA, columnB),\n        rowMin = Math.min(rowA, rowB),\n        rowMax = Math.max(rowA, rowB);\n\n    for (var rowIndex = rowMin; rowIndex <= rowMax; rowIndex++) {\n      var row = cells[rowIndex];\n\n      if (row) {\n        // lively.notify(\"change selection \" + columnMin + \" \" + columnMax)\n\n        for (var columnIndex = columnMin; columnIndex <= columnMax; columnIndex++) {\n          var cell = row[columnIndex];\n          // lively.showElement(cell)\n          if (cell) {\n            if (removeSelection) {\n              this.removeSelectedCell(cell);\n            } else {\n              this.addSelectedCell(cell);\n            }\n          }\n        }\n      }\n    }\n\n    this.dispatchEvent(new CustomEvent(\"selection-changed\", { detail: { table: this } }));\n  }\n\n  navigateRelative(columnDelta, rowDelta, multipleSelection) {\n    if (this.currentColumnIndex === undefined) return;\n    var cells = this.cells();\n    if (multipleSelection) {\n      this.changeSelection(-columnDelta, -rowDelta, true);\n\n      this.changeSelection(columnDelta, rowDelta);\n    }\n    var row = cells[this.currentRowIndex + rowDelta];\n    if (!row) return;\n    var newCell = row[this.currentColumnIndex + columnDelta];\n\n    if (newCell) {\n      this.selectCell(newCell, multipleSelection);\n    }\n  }\n\n  setTextSelectionOfCellContents(cell) {\n    var range = document.createRange();\n    var sel = window.getSelection();\n    try {\n      // #TODO find a more correct way to set selection.... \n      range.setStart(cell, 0);\n      // I have problems setting this to the end... so lets go as far as we can in small steps\n      for (var i = 0; i <= cell.textContent.length; i++) {\n        range.setStart(cell, i);\n      }\n    } catch (e) {\n      // do nothing..\n    }\n    range.collapse(true);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n\n  clearAllSelection() {\n    this.querySelectorAll(\"td\").forEach(ea => {\n      ea.classList.remove(\"editing\");\n      ea.removeAttribute(\"contentEditable\"\n      // ea.contentEditable = false\n\n      );\n    });\n  }\n\n  clearSelection(doNotClearStart) {\n    if (this.currentCell) {\n      this.currentCell.removeAttribute(\"contentEditable\");\n      this.currentCell.classList.remove(\"table-selected\");\n    }\n    if (!doNotClearStart) {\n      this.currentCell = undefined;\n      this.currentRow = undefined;\n      this.currentRowIndex = undefined;\n      this.currentColumnIndex = undefined;\n      this.currentColumn = undefined;\n      this.startCell = undefined;\n      this.startRowIndex = undefined;\n      this.startColumnIndex = undefined;\n    }\n\n    this.querySelectorAll(\"td,th\").forEach(ea => {\n      ea.classList.remove(\"table-selected\");\n      ea.classList.remove(\"start-selection\");\n    });\n\n    this.selectedCells = [];\n  }\n\n  addSelectedCell(element) {\n    if (!this.selectedCells) this.selectedCells = [];\n    if (this.selectedCells.indexOf(element) < 0) {\n      this.selectedCells.push(element);\n    }\n    element.classList.add(\"table-selected\");\n  }\n\n  removeSelectedCell(element) {\n    if (!this.selectedCells) this.selectedCells = [];\n    this.selectedCells.push(element);\n    this.selectedCells = this.selectedCells.filter(ea => ea !== element);\n    element.classList.remove(\"table-selected\");\n  }\n\n  /*MD ## Focus MD*/\n\n  onContextMenu(evt) {\n    if (!evt.shiftKey) {\n      evt.stopPropagation();\n      evt.preventDefault();\n      var menu = new ContextMenu(this, [[\"add column\", () => this.insertColumnAt(this.currentColumnIndex)], [\"remove column\", () => this.removeColumnAt(this.currentColumnIndex)], [\"add row\", () => this.insertRowAt(this.currentRowIndex)], [\"remove row\", () => this.removeRowAt(this.currentRowIndex)]]);\n      menu.openIn(document.body, evt, this);\n      return true;\n    }\n  }\n\n  onExtentChanged() {\n    var table = this.get(\"table\");\n    lively.setWidth(table, lively.getExtent(this).x);\n    lively.setHeight(this, lively.getExtent(table).y, true);\n  }\n\n  async onFocusout() {\n    // we are about to lose our focus lets wait a bit\n    await lively.sleep(0\n    // if we really lost our focus... \n    );if (!this.isInFocus()) {\n      this.classList.remove(\"active\");\n    }\n  }\n\n  onFocus() {\n    if (this.isInFocus()) {\n      this.classList.add(\"active\");\n    }\n  }\n\n  setFocusAndTextSelection(element) {\n    if (!element) return;\n    this.clearAllSelection();\n    // element.contentEditable = true;\n    element.focus();\n    var sel = window.getSelection();\n    // sel.selectAllChildren(element)    \n  }\n  /*MD ## Keyboard Events MD*/\n\n  // #important\n  onEnterDown(evt) {\n\n    if (!this.currentCell) return;\n    var cell = this.currentCell;\n    var wasEditing = this.isInEditing(cell);\n\n    if (wasEditing) {\n      this.currentCell.contentEditable = false;\n      this.focus();\n\n      this.stopEditingCurrentCell();\n    } else {\n      this.startEditingCurrentCell();\n    }\n\n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n\n  onEscDown(evt) {\n    if (!this.currentCell) return;\n    this.setFocusAndTextSelection(this.currentCell);\n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n\n  isInEditing(cell) {\n    return cell.classList.contains(\"editing\");\n  }\n\n  handleArrowKey(evt, deltaColumn, deltaRow) {\n    if (this.isInEditing(this.currentCell)) return;\n    this.navigateRelative(deltaColumn, deltaRow, evt.shiftKey == true);\n    this.setFocusAndTextSelection(this.currentCell);\n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n\n  startEditingCurrentCell() {\n    if (!this.currentCell) return;\n    // lively.showElement(this.currentCell).style.outline = \"4px dashed green\"\n    this.currentCell.contentEditable = true;\n    this.currentCell.classList.add(\"editing\");\n    this.dispatchEvent(new CustomEvent(\"start-editing-cell\"));\n    this.currentCell.focus();\n  }\n\n  stopEditingCurrentCell() {\n    if (!this.currentCell) return;\n    // lively.showElement(this.currentCell).style.outline = \"4px dashed red\"\n    this.currentCell.contentEditable = false;\n    this.currentCell.classList.remove(\"editing\");\n    this.dispatchEvent(new CustomEvent(\"finish-editing-cell\"));\n  }\n  /*MD ## Events MD*/\n\n  onLeftDown(evt) {\n    this.handleArrowKey(evt, -1, 0);\n  }\n\n  onRightDown(evt) {\n    this.handleArrowKey(evt, 1, 0);\n  }\n\n  onUpDown(evt) {\n    this.handleArrowKey(evt, 0, -1);\n  }\n\n  onDownDown(evt) {\n    this.handleArrowKey(evt, 0, 1);\n  }\n\n  // #important\n  onMouseDown(evt) {\n    var cell = evt.composedPath()[0];\n    if (cell.localName != 'td') return; // clicked somewhere elese...\n\n    if (evt.ctrlKey) {\n      if (cell.localName == 'td') {\n        this.selectCell(cell, true)\n        return\n      }\n    }\n    \n    \n    if (cell === this.currentCell) {\n      if (this.isInEditing(this.currentCell)) {\n        return;\n      } else {\n        // edit only on second click into selection #TODO does not work any more... edit seems to be always on\n        this.startEditingCurrentCell();\n      }\n    } else {\n      if (this.currentCell && this.currentCell.classList.contains(\"editing\")) {\n        this.stopEditingCurrentCell();\n      }\n\n      this.focus();\n      this.selectCell(cell);\n      this.setFocusAndTextSelection(this.currentCell);\n    }\n    evt.stopPropagation();\n    evt.preventDefault();\n\n    if (cell !== this.currentCell) {\n      this.clearSelection(true);\n      this.selectCell(cell);\n    }\n\n    lively.addEventListener(\"LivelyTable\", document.body, \"mousemove\", evt => this.onMouseMoveSelection(evt));\n    lively.addEventListener(\"LivelyTable\", document.body, \"mouseup\", evt => this.onMouseUpSelection(evt));\n\n    evt.preventDefault();\n    evt.stopPropagation();\n  }\n\n  onMouseMoveSelection(evt) {\n    var cell = evt.composedPath()[0];\n    if (this.isCell(cell)) {\n      if (cell === this.currentCell) return;\n\n      this.clearSelection(true);\n\n      var column = this.columnOfCell(cell);\n      var row = this.rowOfCell(cell);\n\n      this.changeSelectionBetween(this.startColumnIndex, column, this.startRowIndex, row\n\n      // lively.notify(\"mouse move\")\n      );\n    }\n  }\n\n  //\n  // Mouse Events\n  //\n\n  onMouseUpSelection(evt) {\n    lively.removeEventListener(\"LivelyTable\", document.body, \"mousemove\");\n    lively.removeEventListener(\"LivelyTable\", document.body, \"mouseup\");\n\n    var cell = evt.composedPath()[0];\n    if (cell === this.currentCell) return;\n\n    this.setFocusAndTextSelection(this.currentCell\n    // var sel = window.getSelection();\n    // sel.removeAllRanges();\n    // var range = document.createRange();\n    // this.currentCell.focus()\n    // range.selectNodeContents(this.currentCell);  \n    // sel.addRange(range);\n    );\n  }\n\n  onClick(evt) {}\n\n  /*MD ## Copy and Paste MD*/\n\n  onCopy(evt) {\n    if (this.isEditingCells()) return\n    \n    // lively.notify(\"on copy\")\n\n    if (!this.currentCell) return;\n    if (this.selectedCells && this.selectedCells.length > 1) {\n      var data = this.getSelectionAsCSV\n      // lively.notify(\"data \" + data)\n      ();evt.clipboardData.setData('text/plain', data);\n    } else {\n      var selString = window.getSelection().toString();\n      if (selString.length > 0) {\n        evt.clipboardData.setData('text/plain', selString);\n      } else {\n        evt.clipboardData.setData('text/plain', this.currentCell.textContent);\n      }\n    }\n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n\n  onCut(evt) {\n    if (this.isEditingCells()) return\n    \n    this.onCopy(evt);\n    if (this.selectedCells && this.selectedCells.length > 1) {\n      // lively.notify(\"cut \" + this.selectedCells.length)\n      this.selectedCells.forEach(ea => {\n        ea.textContent = \"\";\n      });\n    } else {\n      this.currentCell.textContent = \"\";\n    }\n  }\n\n  onPaste(evt) {    \n    if (this.isEditingCells()) return\n    \n    // lively.notify(\"on paste\")\n\n    if (!this.currentCell) return;\n\n    var cells;\n    if (this.selectedCells && this.selectedCells.length > 1) {\n      // lively.notify(\"cut \" + this.selectedCells.length)\n      cells = this.selectedCells;\n    } else {\n      cells = [this.currentCell];\n    }\n\n    var data = evt.clipboardData.getData('text/plain').trim();\n    \n    let baseRow = this.rowOfCell(cells[0]);\n    let baseColumn = this.columnOfCell(cells[0]);\n   \n    cells.map(cell => {\n      // cells will change so get them early... \n      return { column: this.columnOfCell(cell), row: this.rowOfCell(cell), cell};\n    }).forEach(({column, row, cell}) => {\n      if(data[0]==='=') {      \n        this.setCellExpression(cell, this.moveRelativeReferencesInCode(data, column - baseColumn, row - baseRow));\n      } else {\n        this.setFromCSVat(data, column, row);\n      }\n    });\n    \n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n\n  /*MD ## Rows and Columns MD*/\n\n  deactivateAllExpressions() {\n    for (const row of this.cells()) {\n      for (const cell of row) {\n        if (cell.expression) {\n          cell.expression.expression.dispose();\n        }\n      }\n    }\n    this.registerOnAllCells();\n  }\n\n  moveReferencesAfter(index, moveColumns, isInsertion) {\n    const delta = isInsertion ? 1 : -1;\n\n    for (const row of this.cells()) {\n      for (const cell of row) {\n        if (cell.expression) {\n          const rewrittenCode = this.moveReferencesInCode(cell.expression.text, index, moveColumns, isInsertion);\n          this.setCellExpression(cell, rewrittenCode);\n        }\n      }\n    }\n    this.registerOnAllCells();\n  }\n  \n  moveReferencesInCode(code, index, moveColumns, isInsertion) {\n    return code.replace(LivelyTable.CellReferenceRegex, (ref, absoluteOrRelative, column, row) => {\n      if(moveColumns) {\n        let columnIndex = this.columnIndex(column);\n        if(columnIndex - 1 >= index) {\n          if(isInsertion) {\n            columnIndex++;\n          } else {\n            columnIndex--;\n          }\n        }\n        column = this.columnIndexToDigit(columnIndex);\n      } else {\n        row = +row;\n        if(row - 1 >= index) {\n          if(isInsertion) {\n            row++;\n          } else {\n            row--;\n          }\n        }\n      }\n      return absoluteOrRelative+column+row;\n    })\n  }\n  \n  moveRelativeReferencesInCode(code, columnOffset, rowOffset) {\n    console.log(columnOffset, rowOffset);\n    return code.replace(LivelyTable.CellReferenceRegex, (ref, absoluteOrRelative, column, row) => {\n      if(absoluteOrRelative === '~') {\n        let columnIndex = this.columnIndex(column);\n        columnIndex += columnOffset;\n        column = this.columnIndexToDigit(columnIndex);\n        \n        row = +row;\n        row += rowOffset;\n      }\n      return absoluteOrRelative+column+row;\n    })\n  }\n\n  insertColumnAt(index) {\n    this.deactivateAllExpressions();\n    this.cells().forEach(cellArray => {\n      var oldCell = cellArray[index];\n      var newCell = document.createElement(oldCell.tagName);\n      oldCell.parentElement.insertBefore(newCell, oldCell);\n      newCell.style.width = oldCell.style.width;\n    });\n    this.moveReferencesAfter(index, true, true);\n  }\n\n  removeColumnAt(index) {\n    this.deactivateAllExpressions();\n    this.cells().forEach(cellArray => {\n      var oldCell = cellArray[index];\n      oldCell.remove();\n    });\n    this.moveReferencesAfter(index, true, false);\n  }\n\n  isInFocus(focusedElement = lively.activeElement()) {\n    if (focusedElement === this) return true;\n    if (!focusedElement) return false;\n    return this.isInFocus(focusedElement.parentElement || focusedElement.parentNode);\n  }\n\n  insertRowAt(index) {\n    this.deactivateAllExpressions();\n    var oldRow = this.rows()[index];\n    var newRow = document.createElement(\"tr\");\n    newRow.innerHTML = oldRow.innerHTML;\n    newRow.querySelectorAll(\"th,td\").forEach(ea => ea.textContent = \"\");\n    oldRow.parentElement.insertBefore(newRow, oldRow);\n    this.moveReferencesAfter(index, false, true);\n    return newRow;\n  }\n\n  removeRowAt(index) {\n    this.deactivateAllExpressions();\n    var oldRow = this.rows()[index];\n    oldRow.remove();\n    this.registerOnAllCells();\n    this.moveReferencesAfter(index, false, false);\n  }\n\n  /*MD # Accessing Content MD*/\n\n  asArray() {\n    return Array.from(this.querySelectorAll(\"tr\")).map(eaRow => {\n      return Array.from(eaRow.querySelectorAll(\"td,th\")).map(eaCell => eaCell.textContent);\n    });\n  }\n\n  asCSV() {\n    return this.asArray().map(eaRow => eaRow.join(\"\\t\")).join(\"\\n\");\n  }\n\n  asJSO() {\n    var all = this.asArray();\n    var header = all[0];\n    return all.slice(1).map(row => {\n      var obj = {};\n      row.forEach((ea, index) => {\n        var name = header[index];\n        obj[name] = ea;\n      });\n      return obj;\n    });\n  }\n\n  currentRowToJSO() {\n    return this.rowToJSO(this.currentRow)\n  }\n  \n  rowToJSO(row) {\n    var rowContents =  Array.from(row.querySelectorAll(\"td\")).map(ea => ea.textContent)\n    var jso = {}\n    var headers = this.headers()\n    for(var i in headers) {\n      jso[headers[i]] = rowContents[i]\n    }\n    return jso\n  }\n  \n  // #private\n  maxColumnsIn(array) {\n    return array.reduce((sum, ea) => Math.max(sum, ea.length), 0);\n  }\n\n  setFromArrayClean(array) {\n    var maxColumns = this.maxColumnsIn(array);\n    this.innerHTML = \"<table>\" + array.map((row, rowIndex) => {\n      var html = \"\";\n      for (var i = 0; i < maxColumns; i++) {\n        var ea = row[i] !== undefined ? row[i] : \"\";\n        html += rowIndex == 0 ? // header \n        `<th style=\"width: 40px\">${ea}</th>` : `<td>${ea}</td>`;\n      }\n      return \"<tr>\" + html + \"</tr>\";\n    }).join(\"\\n\") + \"</table>\";\n    this.registerOnAllCells();\n  }\n\n  setEmptyWithSize(width, height) {\n    var table = \"<table>\\n\";\n    for (var column = 0; column < width; column++) {\n      var html = \"\";\n      for (var row = 0; row < height; row++) {\n        html += '<td style=\"min-width:30px; height:20px\"></td>';\n      }\n      table += \"<tr>\" + html + \"</tr>\\n\";\n    }\n    table += \"</table>\";\n    this.innerHTML += table;\n    this.registerOnAllCells();\n  }\n\n  setFromArray(array, force) {\n    if (!this.querySelector(\"tbody\") || force) {\n      this.setFromArrayClean(array);\n    } else {\n      var maxColumns = this.maxColumnsIn(array);\n      this.rows().filter((ea, index) => index >= array.length).forEach(ea => ea.remove());\n      this.cells().forEach(row => {\n        row.filter((cell, index) => {\n          return index >= maxColumns;\n        }).forEach(ea => ea.remove());\n      });\n      this.querySelectorAll(\"td,th\").forEach(ea => ea.textContent = \"\");\n      this.setFromArrayAt(array, 0, 0);\n    }\n  }\n\n  setFromArrayAt(array, columnOffset, rowOffset) {\n    var cells = this.cells();\n    var header = cells[0];\n    var tableLength = columnOffset + array[0].length;\n    // lively.notify(\"grow table? \" + tableLength  + \" \" + header.length + \" | \" + columnOffset + \" \" + array.length )\n    if (tableLength > header.length) {\n      var rows = this.rows\n      // we have to grow wider\n      ();rows.forEach((row, index) => {\n        for (var i = 0; i < tableLength - header.length; i++) {\n          var cell = document.createElement(\"td\");\n          row.appendChild(cell);\n        }\n      }\n      // we changed this contents and have to update\n      );cells = this.cells();\n      header = cells[0];\n    }\n    for (var i = 0; i < array.length; i++) {\n      var row = cells[rowOffset + i];\n      if (!row) {\n        var rowElement = document.createElement(\"tr\");\n        rowElement.innerHTML = header.map(ea => \"<td></td>\").join(\"\");\n        this.querySelector(\"tbody\").appendChild(rowElement);\n        var row = rowElement.querySelectorAll(\"td\");\n        cells.push(row);\n      }\n      var fromRow = array[i];\n      for (var j = 0; j < fromRow.length; j++) {\n        var index = columnOffset + j;\n        var cell = row[index];\n        if (!cell) throw new Error(\"No cell at \" + index + \", in \" + row);\n        cell.textContent = fromRow[j];\n      }\n    }\n    this.registerOnAllCells();\n  }\n\n  // #private\n  splitIntoRows(csv, separator = /[;\\t,]/) {\n    return csv.split(\"\\n\").map(line => {\n      return line.split(separator).map(ea => {\n        var m = ea.match(/^\"(.*)\"$/);\n        if (m) {\n          return m[1];\n        } else {\n          return ea;\n        }\n      });\n    });\n  }\n\n  setFromCSV(csv, separator) {\n    this.setFromArray(this.splitIntoRows(csv, separator));\n  }\n\n  setFromCSVat(csv, column, row, separator) {\n    this.setFromArrayAt(this.splitIntoRows(csv, separator), column, row);\n  }\n\n  /*\n   * set the contents of the table from a JSO where the keys of each object will become the header\n   * example: [{a: 1, b: 2}, {a: 4, b: 5, c: 6}]\n   */\n  setFromJSO(jso, clean = false) {\n    if (!jso) return;\n    var headers = [];\n    var rows = jso.map(obj => {\n      obj = obj || {};\n      // add headers that are introduced in that row\n      Object.keys(obj).forEach(key => {\n        if (headers.indexOf(key) < 0) {\n          headers.push(key);\n        }\n      });\n      return headers.map(key => {\n        return obj[key];\n      });\n    });\n    rows.unshift(headers);\n    if (clean) {\n      this.setFromArrayClean(rows);\n    } else {\n      this.setFromArray(rows); // #TODO why do we need this optimization again?\n    }\n  }\n\n  // #private\n  copySelectionAsTable() {\n    var tmp = LivelyTable.create();\n    tmp.setFromArray(_.values(_.groupBy(this.selectedCells, ea => this.rowOfCell(ea))).map(row => _.sortBy(row, ea => this.columnOfCell(ea)).map(ea => ea.textContent)));\n    return tmp;\n  }\n\n  getSelectionAsCSV() {\n    return this.copySelectionAsTable().asCSV();\n  }\n\n  getSelectionAsJSO() {\n    if (!this.selectedCells) return [];\n\n    let result = [];\n\n    this.selectedCells.forEach(each => {\n      let row = this.rowOfCell(each);\n      let key = this.keyForCell(each);\n      if (!result[row]) result[row] = {};\n      result[row][key] = each.textContent;\n    });\n\n    return result;\n  }\n\n  /*MD ## Lively4 API MD*/\n\n  livelyMigrate(other) {\n    this.clearSelection();\n    var selection = this.cellAt(other.currenColumnIndex, other.currentRowIndex);\n    if (selection) this.selectCell(selection);\n  }\n\n  // #important #lively4api\n  livelyExample() {\n    //this.setFromArray([['A', 'B', 'C', 'D', 'E'], ['First', 'Second', 'Third', 'Fourth', ''], ['Hello', 'World', '', '', ''], ['Foo', 'Bar', '', '', '']]);\n    this.setEmptyWithSize(20, 20);\n  }\n\n  /*MD ## Excel Functionality MD*/\n  getCellValue(cell) {\n    if (!cell) return undefined;\n    if (cell.expression && !cell.expression.expression.isDisposed()) {\n      return cell.expression.expression.getCurrentValue();\n    }\n    let val = cell.textContent;\n    if (this.currentCell === cell) {\n      val = this.currentCellValue;\n    }\n    return isNaN(+val) ? val : +val;\n  }\n\n  registerOnAllCells() {\n    for (const ae of this.activityChangeExpressions || []) {\n      ae.dispose();\n    }\n    this.activityChangeExpressions = [];\n    const cells = this.cells();\n    for (const row of this.cells()) {\n      for (const cell of row) {\n        this.registerCellForActivityChanges(cell);\n      }\n    }\n  }\n\n  registerCellForActivityChanges(cell) {\n    const expression = aexpr(() => cell === this.currentCell).onChange(isActive => this.cellChangedActive(cell, isActive));\n    this.activityChangeExpressions.push(expression);\n  }\n\n  cellChangedActive(cell, isActive) {\n    const text = cell.textContent;\n    if (isActive) {\n      const expression = cell.expression;\n      if (expression) {\n        if(!expression.expression.isDisposed()) {          \n          this.currentCellValue = expression.expression.getCurrentValue();\n          expression.expression.dispose();\n        }\n        cell.textContent = expression.text;\n      } else {\n        this.currentCellValue = cell.textContent;\n      }\n      delete cell.expression;\n    } else {\n      this.setCellExpression(cell, text)\n    }\n  }\n\n  setCellExpression(cell, text) {\n    cell.removeAttribute(\"bgcolor\");\n\n    if (text[0] === '=') {\n      if (text[1] === '=') {\n        let code = text.substring(2, text.length);\n        const value = this.evaluateCellText(code);\n        cell.textContent = value;\n        const inactiveExpression = { getCurrentValue: () => {\n            return value;\n          }, dispose: () => {}, isDisposed: () => {return false} };\n        cell.expression = { expression: inactiveExpression, text };\n      } else {\n        cell.setAttribute(\"bgcolor\", \"CCFFCC\");\n        let code = text.substring(1, text.length);\n        const [expressionCode, onChangeCode] = code.split('|');\n        \n        let expression = aexpr(() => this.evaluateCellText(expressionCode)).onChange(newValue => cell.textContent = newValue);\n        if (onChangeCode) {\n          expression.onChange(value => {\n            eval(onChangeCode);\n          });\n        }\n        const { value, isError } = expression.evaluateToCurrentValue();\n        if (isError) {\n          cell.textContent = \"Error in Expression\";\n          expression.dispose();\n        } else {          \n          cell.textContent = value;\n        }\n        cell.expression = { expression, text };\n      }\n    }\n  }\n  \n  static get CellReferenceRegex() {\n    return /([\\$~])([a-zA-Z]+)(\\d+)/gm;\n  }\n\n\n  evaluateCellText(code) {\n    let params = {};\n    return eval(code.replace(LivelyTable.CellReferenceRegex, (ref, absoluteOrRelative, column, row) => {\n      params[ref] = this.getCellValue(this.cellFromCode(column, row));\n      return \"params[\\\"\" + ref + \"\\\"]\";\n    }));\n  }\n\n  /** \n    @param column: The column in A - ZZ... Format\n    @param rowIndex: The Index of the row in 1 - Infintiy Range\n    @Return the corresponding cell\n   */\n  cellFromCode(column, rowIndex) {\n    return this.cellAt(this.columnIndex(column), rowIndex - 1);\n  }\n\n  columnIndex(column) {\n    var a = column.toUpperCase();\n    let columnIndex = 0;\n    while (a.length > 0) {\n      columnIndex *= 26;\n      columnIndex++;\n      columnIndex += a.charCodeAt(0) - 65;\n      a = a.substring(1, a.length);\n    }\n    return columnIndex - 1;\n  }\n  \n  columnIndexToDigit(columnIndex) {\n    var column = \"\";\n    while (columnIndex >= 26) {\n      column = String.fromCharCode(65 + columnIndex % 26) + column;\n      columnIndex /= 26;\n      columnIndex = Math.floor(columnIndex);\n      columnIndex--;\n    }\n    column = String.fromCharCode(65 + columnIndex % 26) + column;\n    return column;\n  }\n}"]}