{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-xray/src/components/halo/lively-selection.js"],"names":["Morph","nodes","events","pt","rect","Selection","isMetaNode","isSelection","load","window","lively","setTimeout","current","document","createElement","components","openInBody","remove","registerOn","documentElement","target","removeEventListener","addEventListener","e","onPointerDown","onPointerDownPre","initialize","startPositions","Map","originalExtents","originalOffset","allowsSelection","element","evt","classList","contains","livelyAllowsSelection","ctrlKey","altKey","composedPath","find","ea","body","pointerType","showEvent","style","display","touchAction","startSelection","hand","childNodes","length","disabled","sourceCapabilities","firesTouchEvents","showPoint","clientX","clientY","onPointerMove","onPointerUp","selectionOffset","context","evtPos","parentElement","appendChild","setGlobalPosition","topLeft","minPt","bottomRight","maxPt","selectionBounds","setExtent","subPt","Array","from","filter","getBoundingClientRect","r","eaRect","left","top","width","height","containsRect","releasePointerCapture","pointerId","minP","maxP","forEach","that","HaloService","showHalos","haloRemove","console","log","haloCopyObject","haloItem","html","clipboard","nodesToHTML","lastClickPos","getGlobalPosition","result","pasteHTMLDataInto","haloDragStart","fromPos","concat","set","getPosition","haloDragTo","toPos","delta","setPosition","get","addPt","haloGrabStart","startPos","isCopyItem","startEventPos","add","pos","haloGrabMove","grabHaloItem","globalPosition","haloGrabStop","positions","dropTarget","droptargetAtEvent","i","offset","position","localizePosition","s","haloResizeStart","eventOffset","getExtent","parentNode","haloResizeMove","newExtent","oldExtent","scale","scaleBy","x","y","oldRelativePos","scaleByPt","haloResizeStop","livelyInspect","contentNode","inspector","selection"],"mappings":"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","file":"lively-selection.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\n\nimport * as nodes from 'src/client/morphic/node-helpers.js';\nimport * as events from 'src/client/morphic/event-helpers.js';\nimport {pt, rect} from 'src/client/graphics.js';\n\n// import Clipboard from 'src/client/clipboard.js'; // #TODO Problems with cyclic dependencies...\n\n// document.querySelectorAll(\"lively-selection\").forEach(ea => ea.remove())\n\nexport default class Selection extends Morph {\n  \n  get isMetaNode() { return true}\n  get isSelection() { return true}\n \n  static async load() {\n    if (!window.lively) {\n      return setTimeout(() => {Selection.load()}, 100) // defere\n    }\n    \n    if (!this.current){\n      this.current = document.createElement(\"lively-selection\")\n      await lively.components.openInBody(this.current)\n      this.current.remove()\n    } \n    this.current.registerOn(document.documentElement)\n  }\n  \n  registerOn(target) {\n    lively.removeEventListener(\"Selection\", target)\n    lively.addEventListener(\"Selection\", target, \"pointerdown\", \n      e => Selection.current.onPointerDown(e))  // select in bubling phase ...\n    lively.addEventListener(\"Selection\", target, \"pointerdown\", \n      e => Selection.current.onPointerDownPre(e), true)  // pre select in capturing phase ...\n  }\n \n  initialize() {\n    // super.initialize()\n    this.nodes = [];\n    this.startPositions = new Map();\n    this.originalExtents = new Map();\n    this.originalOffset = new Map();\n  }\n\n  allowsSelection(element, evt) {\n    // the \"evt\" is important, because an element might be picky about it...\n     return (element.classList && element.classList.contains(\"lively-group\"))\n       || (element.livelyAllowsSelection && element.livelyAllowsSelection(evt))\n       // ||(element.tagName == \"LIVELY-CONTAINER\")\n  }\n  \n  onPointerDownPre(evt) {\n    // lively.showEvent(evt)\n\n    if (evt.ctrlKey || evt.altKey) return;\n    var target = evt.composedPath().find(ea => this.allowsSelection(ea, evt)); // start with the innermost\n    // console.log('evt path:' + evt.composedPath().map(ea => ea.classList).join(\"|\")+ \": \" + target)\n    \n    if (evt.composedPath()[0] !== document.body && evt.composedPath()[0] !==  document.documentElement && !target) return \n    if (evt.pointerType == \"touch\") return; // no selection via touch\n    \n    lively.showEvent(evt).style.display = \"none\"; // #HACK, weired event shit.. without it the world scrolls #TODO\n    document.documentElement.style.touchAction = \"none\"\n\n    if (target) {\n      // we won't be called in the bubbling, so we do it now\n      this.startSelection(target, evt)\n    }\n    \n  }\n  \n  onPointerDown(evt) {\n    var target;\n    if (evt.ctrlKey || evt.altKey) return;\n    if (evt.composedPath()[0] === document.body || evt.composedPath()[0] ===  document.documentElement) {\n      target = document.body\n    } \n    if (evt.pointerType == \"touch\") return; // no selection via touch\n    \n    if (!target)\n      target = evt.composedPath().find(ea => ea.classList && ea.classList.contains(\"lively-group\"))\n    // if (target) lively.showElement(target)\n    if (!target) return;\n    \n    document.documentElement.style.touchAction = \"none\"\n    // document.documentElement.setPointerCapture(evt.pointerId)\n    \n    if (lively.hand && lively.hand.childNodes.length > 0) return; // in drag\n    if (this.disabled) return\n    \n    // don't select with touch \n    if (evt.sourceCapabilities && evt.sourceCapabilities.firesTouchEvents) {\n      lively.showPoint(pt(evt.clientX, evt.clientY))     \n      return\n    }\n    this.startSelection(target, evt)\n  }\n\n  startSelection(target, evt) {\n    lively.addEventListener(\"Selection\", document.documentElement, \"pointermove\", \n      e => this.onPointerMove(e))\n    lively.addEventListener(\"Selection\", document.documentElement, \"pointerup\", \n      e => this.onPointerUp(e))\n\n    this.selectionOffset = pt(evt.clientX, evt.clientY)\n    this.context = target;\n    this.nodes = [];\n  }\n  \n  \n  onPointerMove(evt) {\n    var evtPos =  pt(evt.clientX, evt.clientY);\n\n    if (!this.parentElement) {  \n      document.body.appendChild(this)\n      lively.setGlobalPosition(this, this.selectionOffset);\n    }\n    \n    var topLeft = this.selectionOffset.minPt(evtPos);\n    var bottomRight = this.selectionOffset.maxPt(evtPos);\n  \n    this.selectionBounds = rect(topLeft, bottomRight);\n    lively.setGlobalPosition(this,  topLeft);\n    lively.setExtent(this, bottomRight.subPt(topLeft));\n  \n    this.nodes = Array.from(this.context.childNodes)\n      .filter( ea =>  !ea.isMetaNode)\n      .filter( ea => {\n        if (!ea.getBoundingClientRect || ea.isMetaNode) return false;\n        var r = ea.getBoundingClientRect();\n        var eaRect = rect(r.left, r.top,  r.width, r.height);\n        return this.selectionBounds.containsRect(eaRect);\n      });\n  }\n\n  onPointerUp(evt) {\n    lively.removeEventListener(\"Selection\", document.documentElement, \"pointermove\")\n    lively.removeEventListener(\"Selection\", document.documentElement, \"pointerup\")\n\n    document.documentElement.style.touchAction = \"\"    \n    document.documentElement.releasePointerCapture(evt.pointerId)\n    \n    if (this.nodes.length > 0) {\n      var minP=this.selectionBounds.bottomRight(); \n      var maxP=this.selectionBounds.topLeft();\n        \n      this.nodes.forEach( ea => {\n        var r = ea.getBoundingClientRect();\n        var eaRect = rect(r.left, r.top,  r.width, r.height);\n        minP = eaRect.topLeft().minPt(minP);\n        maxP = eaRect.bottomRight().maxPt(maxP);\n      });\n      lively.setGlobalPosition(this, minP);\n      lively.setExtent(this, maxP.subPt(minP));\n    \n      window.that=this;\n      setTimeout(()=> {\n        HaloService.showHalos(this);\n      },0 )\n    } else {\n      this.remove();\n    }\n    // console.log(\"drag end\")\n\n  }\n\n\n  haloRemove() {\n    this.nodes.forEach(ea => {\n      console.log(\"selection.remove \" + ea);\n      ea.remove();\n    });\n    this.remove();\n  }\n\n  haloCopyObject(haloItem) {\n    \n    // this.nodes = this.nodes.map(ea => {\n    //   var copy = haloItem.cloneObject(ea);\n    //   ea.parentNode.appendChild(copy); \n    //   return copy;\n    // }).filter( ea => ea);\n    \n    var html = lively.clipboard.nodesToHTML(this.nodes)\n    lively.clipboard.lastClickPos = lively.getGlobalPosition(this) // used in pasted as offset\n    var result = lively.clipboard.pasteHTMLDataInto(html, this.parentElement, true)\n    \n    this.nodes = result\n    return this;\n  }\n \n \n  haloDragStart(fromPos) {\n    this.startPositions = new Map();\n    this.nodes.concat([this]).forEach(ea => {\n      this.startPositions.set(ea, lively.getPosition(ea));\n    })\n }\n \n  haloDragTo(toPos, fromPos) {\n    var delta = toPos.subPt(fromPos);\n    this.nodes.concat([this]).forEach(ea => {\n      nodes.setPosition(ea, this.startPositions.get(ea).addPt(delta));\n    });\n    window.that = this\n    HaloService.showHalos(this);\n  }\n \n  // cleanup:\n  haloGrabStart(evt, haloItem, startPos) {\n    if (haloItem.isCopyItem) {\n      console.log(\"copy items...\");\n      this.haloCopyObject(haloItem);\n    }\n    this.startEventPos = startPos;\n\n    this.startPositions.set(this, lively.getPosition(this)); // #BUG this is to late, because drag is detacted later...\n    this.nodes.forEach( ea => {\n      ea.classList.add(\"lively4-grabbed\")\n      var pos = lively.getPosition(ea);\n      this.startPositions.set(ea, pos);\n    });\n  }\n  \n  haloGrabMove(evt, grabHaloItem) {\n    \n    this.haloDragTo(events.globalPosition(evt), this.startEventPos);\n  }\n  \n  haloGrabStop(evt, grabHaloItem) {\n   var positions = new Map();\n    // first add temorarily to selection ... so that we do not drop into each other\n    this.nodes.forEach( ea => {\n      ea.classList.remove(\"lively4-grabbed\")\n      positions.set(ea, nodes.globalPosition(ea));\n      this.appendChild(ea);\n    });\n\n    var dropTarget = grabHaloItem.droptargetAtEvent(this, evt);\n\n    // then drop into the real target\n    dropTarget = dropTarget || document.body; // we have to drop somewhere\n    var i=0;\n    var offset = nodes.globalPosition(dropTarget);\n    this.nodes.forEach( ea => {\n      dropTarget.appendChild(ea);\n      ea.style.position = \"absolute\";\n      \n      var pos = positions.get(ea);\n      if (dropTarget.localizePosition) {s\n        pos = dropTarget.localizePosition(pos);\n      } else {\n        pos = pos.subPt(offset);\n      }\n      nodes.setPosition(ea, pos);\n    });\n    HaloService.showHalos(this);\n  }\n  \n  haloResizeStart(evt, haloItem) {\n    this.eventOffset = events.globalPosition(evt);\n    this.nodes.concat([this]).forEach( ea => {\n       this.startPositions.set(ea, nodes.globalPosition(ea));\n       this.originalExtents.set(ea, nodes.getExtent(ea));\n       this.originalOffset.set(ea, nodes.globalPosition(this).subPt(\n        nodes.globalPosition(ea.parentNode)));\n    });\n  }\n  \n  haloResizeMove(evt, haloItem) {\n    var delta = events.globalPosition(evt).subPt(this.eventOffset)\n    var newExtent = this.originalExtents.get(this).addPt(delta)\n  \n    var oldExtent = this.originalExtents.get(this)\n    var scale = newExtent.scaleBy(1/ oldExtent.x, 1/oldExtent.y)\n    \n    //nodes.setExtent(ea, this.originalExtents.get(ea).scaleByPt(scale))\n    nodes.setExtent(this, newExtent)\n    \n    this.nodes.forEach( ea => {\n      var oldRelativePos = this.startPositions.get(ea).subPt(this.startPositions.get(this)) \n      \n      lively.showPoint(this.originalOffset.get(ea))  \n      \n      nodes.setPosition(ea, this.originalOffset.get(ea).addPt(oldRelativePos.scaleByPt(scale)))\n      nodes.setExtent(ea, this.originalExtents.get(ea).scaleByPt(scale))               \n    });\n  }\n  \n  haloResizeStop(evt, haloItem) {\n    \n  }\n  \n  livelyInspect(contentNode, inspector) {\n    var selection = <div class=\"element\"><i>selection</i></div>\n    contentNode.appendChild(selection)\n    this.nodes.forEach(ea => {\n      selection.appendChild(inspector.display(ea, false, null, this));\n    })\n  }\n  \n  \n}  \n\nSelection.load()\n\n"]}