{"version":3,"names":["Selection","Morph","nodes","events","pt","rect","HaloService","default","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","button","hand","childNodes","length","disabled","sourceCapabilities","firesTouchEvents","showPoint","clientX","clientY","onPointerMove","onPointerUp","selectionOffset","context","evtPos","parentElement","appendChild","setClientPosition","topLeft","minPt","bottomRight","maxPt","selectionBounds","setExtent","subPt","Array","from","filter","getBoundingClientRect","r","eaRect","left","top","width","height","containsRect","releasePointerCapture","pointerId","minP","maxP","forEach","that","showHalos","haloRemove","console","log","haloCopyObject","haloItem","html","clipboard","nodesToHTML","lastClickPos","getClientPosition","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"],"sources":["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\nimport {default as HaloService} from \"src/components/halo/lively-halo.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/*MD \n\n# Lively Selection \n\n- allows to drag a rectangle around elements and interact with them as a group\n- registers itself in load()\n\nMD*/\n\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.button === 1 || evt.button === 2) { // middle mouse or riught mouse button\n      return\n    }\n    \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.setClientPosition(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.setClientPosition(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.setClientPosition(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.getClientPosition(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"],"mappings":"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"}