{"version":3,"names":["Separator","Morph","pt","initialize","lively","addEventListener","evt","onPointerMoveStart","originalLengths","Map","originalFlexs","getPreviousElement","selector","getAttribute","parentElement","querySelector","previousElementSibling","getNextElement","nextElementSibling","isHorizontal","getWidth","getHeight","element","getBoundingClientRect","width","height","getOriginalLength","get","setOriginalLength","l","set","getOriginalFlex","setOriginalFlex","setHeight","h","flex","newFlex","setFlex","style","setWidth","w","Number","isNaN","newWidth","Math","abs","getFlex","parseFloat","getComputedStyle","flexGrow","f","getLength","setLength","value","getEventLength","clientY","clientX","lastPointerDown","Date","now","count","rememberOriginals","dragOffset","document","documentElement","onPointerMove","onPointerMoveEnd","stopPropagation","force","prev","next","undefined","onClick","toggleCollapse","prevLength","lastPrevLength","newPrevLength","lastNextLength","delta","newNext","newPrev","preventDefault","removeEventListener","clickTime","livelyExample","setAttribute","a","createElement","id","backgroundColor","textContent","b","c","appendChild","display","flexDirection"],"sources":["lively-separator.js"],"sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\n\nimport {pt}  from 'src/client/graphics.js';\n\nexport default class Separator extends Morph {\n  initialize() {\n    // console.log(\"intialize separator \" )\n    lively.addEventListener('lively', this,'pointerdown', evt => this.onPointerMoveStart(evt));\n    \n    \n    // we have to synthesize our own click\n    // lively.addEventListener('lively', this,'click', evt => this.onClick(evt));\n    \n    this.originalLengths = new Map()\n    this.originalFlexs = new Map()\n  }\n\n  getPreviousElement() {\n    var selector = this.getAttribute(\"prev\")\n    if (selector) return this.parentElement.querySelector(selector);\n    return this.previousElementSibling\n  }\n  \n  getNextElement() {\n    var selector = this.getAttribute(\"next\") \n    if (selector) return this.parentElement.querySelector(selector);\n    return this.nextElementSibling\n  }\n  \n  isHorizontal() {\n    return this.getWidth(this) > this.getHeight(this)\n  }\n\n  getWidth(element) {\n    if (!element) return 0\n    return element.getBoundingClientRect().width\n  }\n\n  getHeight(element) {\n    if (!element) return 0\n    return element.getBoundingClientRect().height\n  }\n\n  getOriginalLength(element) {\n    if (!element) return 0\n    return this.originalLengths.get(element)\n  }\n\n  setOriginalLength(element, l) {\n    if (!element) return\n    return this.originalLengths.set(element, l)\n  }\n\n  getOriginalFlex(element) {\n    if (!element) return 0\n    return this.originalFlexs.get(element)\n  }\n\n  setOriginalFlex(element, l) {\n    if (!element) return\n    return this.originalFlexs.set(element, l)\n  }\n\n  setHeight(element, h) {\n    if (!element) return\n    var flex = this.getOriginalFlex(element)\n    if (flex > 0 ) {\n      var newFlex = h / this.getOriginalLength(element) * flex\n      // console.log(\"new flex \" + newFlex)\n      this.setFlex(element, newFlex)\n    } else {\n      element.style.height = h + \"px\";\n    }\n  }\n\n  setWidth(element, w) {\n    \n    if (!element) return\n    var flex = this.getOriginalFlex(element)\n\n    // console.log('set width ' +element.id + \" \" + w + \" flex: \" + flex)\n\n    if (w == 0) {\n      element.style.width = w + \"px\";\n      this.setFlex(element, 0)\n      return \n    }\n\n    if (flex > 0 ) {\n      var newFlex = w / this.getOriginalLength(element) * flex\n      if (Number.isNaN(newFlex)) {\n        this.setFlex(element, flex)\n      } else {\n        this.setFlex(element, newFlex)\n        var newWidth = element.getBoundingClientRect().width\n        if (Math.abs(w - newWidth) > 10) {\n            // try again...  \n            newFlex = w / newWidth * this.getFlex(element)\n            // console.log('TRY AGAIN ', w, newWidth , \" -> \" + newFlex + \"flex\")\n            \n            this.setFlex(element, newFlex)\n        }\n        \n        \n      }\n    } else {\n      element.style.width = w + \"px\";\n    }\n  }\n  \n  getFlex(element) {\n    if (!element) return 0\n    return parseFloat(getComputedStyle(element).flexGrow) \n  }\n\n  setFlex(element, f) {\n    // console.log(\"set flex \" + element.id + \" \" + f)\n    if (f == 0) {\n      f = 0.0001; // we cannot distinguish between flex and not flex otherwise...\n    }\n    if (!element) return\n    element.style.flex = f \n  }\n\n  getLength(element) {\n    if (this.isHorizontal()) {\n      return this.getHeight(element)\n    } else {\n      return this.getWidth(element)\n    }\n  }\n\n  setLength(element, value) {\n    if (this.isHorizontal()) {\n      this.setHeight(element, value)\n    } else {\n      this.setWidth(element, value)\n    }\n  }\n\n\n  getEventLength(evt) {\n    if (this.isHorizontal()) {\n      return evt.clientY;\n    } else {\n      return evt.clientX;\n    }\n  }\n  \n  onPointerMoveStart(evt) {\n    this.lastPointerDown = Date.now()\n    \n    this.count = 0;\n    this.rememberOriginals(true);\n    this.dragOffset = this.getEventLength(evt);\n    \n    lively.addEventListener('lively-separator-drag', document.documentElement, 'pointermove', evt => this.onPointerMove(evt));\n    lively.addEventListener('lively-separator-drag', document.documentElement, 'pointerup', evt => this.onPointerMoveEnd(evt));\n\n    \n    \n    evt.stopPropagation();\n  }\n  \n  /*\n   * (un-)collabses prev element on click\n   */\n   \n  rememberOriginals(force) {\n    var prev = this.getPreviousElement()\n    var next = this.getNextElement()\n    if (force || this.getOriginalFlex(prev) === undefined) {\n      this.setOriginalFlex(prev, this.getFlex(prev))\n    }\n    if (force || this.getOriginalFlex(next) === undefined) {\n      this.setOriginalFlex(next, this.getFlex(next))\n    }\n\n    if (force || this.getOriginalLength(prev) === undefined) {\n      this.setOriginalLength(prev, this.getLength(prev))\n    }\n    if (force || this.getOriginalLength(next) === undefined) {\n      this.setOriginalLength(next, this.getLength(next))\n    }\n  }\n   \n   \n  onClick(evt) {\n    this.toggleCollapse()  \n  }\n  \n  toggleCollapse() {\n    var prev = this.getPreviousElement()\n    var next = this.getNextElement()\n    \n    this.rememberOriginals()\n    \n    var prevLength = this.getLength(prev);\n    if (this.lastPrevLength || prevLength < 2) {\n      if (!this.lastPrevLength) {\n        var newPrevLength = 200\n        this.setLength(prev, newPrevLength);\n        this.setLength(next, this.getLength(next));                \n      } else {\n        this.setLength(prev, this.lastPrevLength);\n        this.setLength(next, this.lastNextLength);        \n      }\n      delete this.lastPrevLength\n      delete this.lastNextLength;\n    } else {\n      this.lastPrevLength = this.getLength(prev);\n      this.lastNextLength = this.getLength(next);\n      if (this.getAttribute('reverse')) {\n        this.setLength(prev, this.lastPrevLength + this.lastNextLength)\n        this.setLength(next, 0)                \n      } else {\n        this.setLength(prev, 0)\n        this.setLength(next, this.lastPrevLength + this.lastNextLength)        \n      }\n    }\n  }\n  \n\n  onPointerMove(evt) {\n    if (!evt.clientX) return\n    this.count++ \n    if (this.count == 1) return; // ignore the first event because it seems to be off\n    \n    // DEBUG with: \n    // lively.showPoint(pt(evt.clientX, evt.clientY)).innerHTML = \"\" + this.count\n\n    var prev = this.getPreviousElement()\n    var next = this.getNextElement()\n    \n    // 1. calculate values\n    var delta = this.getEventLength(evt) - this.dragOffset\n      \n    var newNext = this.getOriginalLength(next) - delta\n    var newPrev = this.getOriginalLength(prev) + delta\n    \n    // console.log(\"drag \",newNext, newPrev )\n    \n    \n    // 2. constrain new values\n    if (newPrev < 0) {\n      if (next) newNext += newPrev \n      newPrev = 0;\n    }\n    if (newNext < 0) {\n      if (prev) newPrev += newNext; // jump to the max\n      newNext = 0;\n    }\n    // 3. update new values\n    this.setLength(prev, newPrev)\n    this.setLength(next, newNext)\n      \n    evt.stopPropagation();\n    evt.preventDefault();\n  }\n  \n  \n  onPointerMoveEnd(evt) {\n    evt.stopPropagation();\n    evt.preventDefault();\n    lively.removeEventListener('lively-separator-drag',  document.documentElement)\n    \n    \n    var clickTime = Date.now() - this.lastPointerDown;\n    if (clickTime < 200) this.onClick(evt)\n    \n  }\n\n\n  // replace yourself with an example showing yourself working in context\n  livelyExample() {\n    this.setAttribute('reverse', \"true\")\n    var a = document.createElement(\"div\")\n    a.id = \"red\"\n    a.style.backgroundColor = \"red\"\n    a.textContent = \"a\"\n    a.style.flex = 20\n    var b = document.createElement(\"div\")\n    b.style.backgroundColor = \"blue\"\n    b.id = \"blue\"\n    b.textContent = \"b\"\n    b.style.flex = 80\n    var c = document.createElement(\"div\")\n    this.parentElement.appendChild(c)\n    c.style.display = \"flex\"\n    c.style.flexDirection = \"row\";\n    c.appendChild(a)\n    c.appendChild(this)\n    c.appendChild(b)\n  }\n  \n\n\n}\n"],"mappings":"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"}