{"version":3,"names":["HaloGrabItem","__SystemJSRewritingHack","_export","setters","_srcComponentsHaloLivelyHaloItemJs","HaloItem","default","_srcClientMorphicNodeHelpersJs","nodes","_srcClientMorphicEventHelpersJs","events","_srcClientGraphicsJs","pt","_srcClientPreferencesJs","Preferences","_srcClientMorphicSnappingJs","Grid","execute","_recorder_","_src_components_halo_lively_halo_grab_item_js","Object","defineProperty","get","set","thisIsVererySecretVariableName","enumerable","configurable","droppingBlacklist","initialize","registerMouseEvents","startCustomDragging","start","evt","isDragging","console","log","grabTarget","window","that","lively","notify","ensureID","grabStartEventPosition","globalPosition","grabOffset","subPt","getClientPosition","preventDefault","move","noticableDistanceTo","haloGrabStart","initGrabShadow","prepareGrabTarget","haloGrabMove","moveGrabbedNodeToEvent","stop","haloGrabStop","stopGrabbingAtEvent","grabShadow","document","body","appendChild","classList","add","style","position","removeProperty","cloneNode","isMetaNode","opacity","eventPosition","clientX","clientY","pos","dropAtEvent","setClientPosition","optSnapPosition","dropIndicator","remove","dropTargetIndicator","insertGrabTargetBeforeShadow","removeGrabShadow","setPosition","getPosition","parentElement","parentNode","removeChild","dropTargetDescription","droptarget","id","host","findWorldContextHost","localName","elementToCSSName","droptargetAtEvent","moveGrabShadowToTargetAtEvent","showElement","color","textContent","border","SVGElement","element","foreignObject","createElementNS","insertBefore","node","elementsUnderCursor","allElementsFromPoint","filter","elementUnder","isInElement","halo","i","length","targetNode","canDropInto","contentRoot","root","getContentRoot","markdown","querySelector","children","childNodes","nextChild","Array","from","find","child","nodeType","nodeComesBehind","shiftKey","dist","targetTag","tagName","toLowerCase","worldContext","findWorldContext","parents","allParents","ea","isHaloItem","result","includes","livelyAcceptsDrop","ShadowRoot","bounds","getBoundingClientRect","toTheRight","top","y","bottom","left","x","below","livelyUpdate"],"sources":["lively-halo-grab-item.js"],"sourcesContent":["/*\n * # LivelyHaloGrabItem\n * The GrabHaloItem removes the selected node from its parent element\n * drags it to a new position and places it relative or aboslute \n * (distance or holding shift pressed) into another node. \n */\n \nimport HaloItem from 'src/components/halo/lively-halo-item.js';\nimport * as nodes from 'src/client/morphic/node-helpers.js';\nimport * as events from 'src/client/morphic/event-helpers.js';\nimport {pt} from 'src/client/graphics.js';\nimport Preferences from 'src/client/preferences.js';\nimport {Grid} from 'src/client/morphic/snapping.js';\n\n/*PW  <div class=\"lively-content\" data-lively-id=\"258c4d72-a9b4-4bdf-ba3a-c810055f0f16\" style=\"width: 200px; height: 100px; border: 1px solid black; position: relative; background-color: rgba(40, 40, 80, 0.5);\"></div> PW*/\nexport default class HaloGrabItem extends HaloItem {\n \n static get droppingBlacklist() {\n      return {\"*\": \n        [\"h1\",\"h2\",\"h3\",\"h4\",\"h5\", \"lively-window\", \"button\", \"input\", \"lively-halo\", \"html\",  \"lively-selection\", \"lively-connector\", \"lively-code-mirror\",  \"lively-presentation\"] // \"lively-markdown\",\n      }\n  }\n \n  initialize() {\n    this.registerMouseEvents()\n    this.startCustomDragging();\n  }\n\n  // DRAG API\n\n  start(evt) {\n    if (this.isDragging) {\n      console.log(\"isDragging \" + this.isDragging)\n      return;\n    }\n    this.grabTarget = window.that;\n    if (this.grabTarget) {\n      lively.notify(\"GRAB \" + lively.ensureID(this.grabTarget))\n      this.grabStartEventPosition = events.globalPosition(evt);\n      this.grabOffset =  events.globalPosition(evt).subPt(lively.getClientPosition(this.grabTarget));\n\n      evt.preventDefault();\n    }\n  }\n\n  \n  move(evt) {\n    if (this.grabTarget && !this.isDragging && \n      events.noticableDistanceTo(evt, this.grabStartEventPosition)) {\n      // drag detected\n        if (this.grabTarget.haloGrabStart) {\n          this.grabTarget.haloGrabStart(evt, this, this.grabStartEventPosition)\n        } else {\n          this.initGrabShadow();\n          this.prepareGrabTarget();\n        }\n        this.isDragging = true;\n    }\n    if (this.isDragging && this.grabTarget) {\n      if (this.grabTarget.haloGrabMove) {\n        this.grabTarget.haloGrabMove(evt, this)\n      } else {\n        this.moveGrabbedNodeToEvent(evt);\n      }\n    }\n  }\n  \n  stop(evt) {\n    try {\n    if (this.isDragging && this.grabTarget) {\n      if (this.grabTarget.haloGrabStop) {\n        this.grabTarget.haloGrabStop(evt, this)\n      } else {\n        this.stopGrabbingAtEvent(evt);\n      }\n    }\n    } finally {\n      this.isDragging = false;\n      this.grabTarget = null;\n      this.grabStartEventPosition = null;\n      this.grabShadow = null;\n    }\n  }\n  \n  // HELPERS\n  \n  prepareGrabTarget() {\n    document.body.appendChild(this.grabTarget);\n    this.grabTarget.classList.add(\"lively4-grabbed\")\n    this.grabTarget.style.position = 'absolute';\n    this.grabTarget.style.removeProperty('top');\n    this.grabTarget.style.removeProperty('left');\n  }\n  \n  initGrabShadow() {\n    this.grabShadow = this.grabTarget.cloneNode(true);\n    this.grabShadow.isMetaNode = true\n    this.grabShadow.classList.add(\"grabshadow\")\n    this.grabShadow.style.opacity = '0.5';\n    this.grabShadow.style.position = 'relative';\n    this.grabShadow.style.removeProperty('top');\n    this.grabShadow.style.removeProperty('left');\n  }\n  \n  moveGrabbedNodeToEvent(evt) {\n    var eventPosition = pt(evt.clientX, evt.clientY);\n    var pos = eventPosition.subPt(this.grabOffset)\n    \n    this.dropAtEvent(this.grabShadow, evt);\n    lively.setClientPosition(this.grabTarget, Grid.optSnapPosition(pos, evt))\n    evt.preventDefault();\n  }\n  \n  stopGrabbingAtEvent(evt) {\n    if (this.dropIndicator) this.dropIndicator.remove()\n    if (this.dropTargetIndicator) this.dropTargetIndicator.remove()\n      \n    this.grabTarget.classList.remove(\"lively4-grabbed\")\n    if (this.grabShadow.style.position == 'absolute') {\n\n        this.insertGrabTargetBeforeShadow();\n        this.removeGrabShadow();\n        lively.setPosition(this.grabTarget, lively.getPosition(this.grabShadow))\n    } else {    \n      this.insertGrabTargetBeforeShadow();\n      this.removeGrabShadow();\n    \n      this.grabTarget.style.position = 'relative';\n      this.grabTarget.style.removeProperty('top');\n      this.grabTarget.style.removeProperty('left');\n    }\n    evt.preventDefault();\n    this.isDragging = false;\n    \n    if (this.grabTarget.parentElement == document.body) {\n      this.grabTarget.classList.add(\"lively-content\"); // \"desktop content will be preserved\"\n    }\n    \n  }\n  \n  removeGrabShadow() {\n    this.grabShadow.parentNode.removeChild(this.grabShadow);\n  }\n  \n  dropTargetDescription(droptarget) {\n    if (droptarget.id === \"container-root\") {\n      var host = lively.findWorldContextHost(droptarget)\n      if (host) return host.localName\n    }\n    \n    return lively.elementToCSSName(droptarget)\n  }\n  \n  dropAtEvent(grabShadow, evt) {\n    var droptarget = this.droptargetAtEvent(grabShadow, evt);\n    if (droptarget) {      \n      this.moveGrabShadowToTargetAtEvent(droptarget, evt);\n      \n      if (this.dropIndicator) this.dropIndicator.remove()\n      this.dropIndicator = lively.showElement(droptarget)      \n      this.dropIndicator.style.color = \"gray\"\n      this.dropIndicator.textContent = this.dropTargetDescription(droptarget)\n      this.dropIndicator.style.border = \"1px dashed lightgray\"\n      this.dropIndicator.classList.add(\"no\")\n      \n      if (this.dropTargetIndicator) this.dropTargetIndicator.remove()\n      this.dropTargetIndicator = lively.showElement(grabShadow)\n      this.dropTargetIndicator.textContent = \"\"\n\n      this.dropTargetIndicator.style.border = \"1px dashed gray\"\n      // lively.showPoint(lively.getClientPosition(grabShadow))\n      lively.setClientPosition(this.dropTargetIndicator, \n        lively.getClientPosition(grabShadow))\n    }\n  }\n  \n  insertGrabTargetBeforeShadow() {\n    if (this.grabShadow && this.grabTarget) {\n      \n      if (this.grabShadow.parentNode instanceof SVGElement) {\n        var element = this.grabTarget\n        var foreignObject = document.createElementNS(\"http://www.w3.org/2000/svg\", \"foreignObject\")\n        foreignObject.appendChild(element)\n        lively.setPosition(foreignObject, pt(0,0))\n        this.grabShadow.parentNode.insertBefore(foreignObject, this.grabShadow);        \n      } else {\n        this.grabShadow.parentNode.insertBefore(this.grabTarget, this.grabShadow);\n      }\n      \n      \n      \n    }\n  }\n  \n  // #important\n  droptargetAtEvent(node, evt) {   \n    // var elementsUnderCursor = Array.from(events.elementsUnder(evt)).filter( (elementUnder) => {\n    var elementsUnderCursor = lively.allElementsFromPoint(lively.getPosition(evt)).filter( (elementUnder) => {\n      return this.grabTarget !== elementUnder && \n        !lively.isInElement(elementUnder, this.grabTarget) && \n        this.grabShadow !== elementUnder && \n        !lively.isInElement(elementUnder, this.grabShadow) && \n        lively.halo !== elementUnder && \n        !lively.isInElement(elementUnder, lively.halo) \n    });\n    \n    // lively.removeHighlights()\n    // elementsUnderCursor.forEach(ea => lively.showElement(ea))\n    \n    // return document.body // for debugging\n    \n    for (var i = 0; i < elementsUnderCursor.length; i++) {\n      var targetNode = elementsUnderCursor[i];\n      if (HaloGrabItem.canDropInto(node, targetNode) ) {\n        \n        // #TODO redirect drops into components... that want their drops go into the shadow\n        \n        if (targetNode.localName == \"persistent-code-widget\") {\n          return targetNode.contentRoot\n        } else  if (targetNode.localName == \"lively-container\") {\n          var root = targetNode.getContentRoot() \n          // we could still be in markdown...\n          var markdown = root.querySelector(\"lively-markdown\")\n          if (markdown) {\n            return markdown.get(\"#content\")   \n          }\n          return root\n        } else if (targetNode.localName == \"lively-markdown\") {\n          return targetNode.get(\"#content\") \n        } else {\n          return targetNode;\n        }\n      }\n    }\n    return document.body;\n  }\n  \n  moveGrabShadowToTargetAtEvent(targetNode, evt) {\n    var pos = pt(evt.clientX, evt.clientY)    \n    var children = targetNode.childNodes;\n    var nextChild = Array.from(children).find(child => {\n      return child !== this.grabShadow && child !== this.grabTarget &&\n        child.nodeType === 1 && this.nodeComesBehind(child, pos);\n    });\n    \n    targetNode.insertBefore(this.grabShadow, nextChild);\n    this.grabShadow.style.position = 'relative';\n    this.grabShadow.style.removeProperty('top');\n    this.grabShadow.style.removeProperty('left'); \n\n    if (evt.shiftKey || \n      lively.getClientPosition(this.grabShadow).dist(lively.getClientPosition(this.grabTarget)) > 100) {\n      this.grabShadow.parentElement.appendChild(this.grabShadow)\n      this.grabShadow.style.opacity = 0;\n      lively.setPosition(this.grabShadow, pt(0,0))\n      \n      pos = lively.getClientPosition(this.grabTarget);\n      // lively.showPoint(pos)\n      // lively.showElement(this.grabTarget)\n\n\n      // console.log(\"set global position: \" + pos)\n      lively.setClientPosition(this.grabShadow, pos); // localize\n      // lively.setClientPosition(this.grabShadow, pos); // localize\n\n\n      // var mysteriousOffset = pos.subPt(lively.getClientPosition(this.grabShadow))\n      // lively.moveBy(this.grabShadow,mysteriousOffset )\n      \n      // lively.showPoint(lively.getClientPosition(this.grabShadow))\n    } else {\n      // drag position is near enough to relative position, so SNAP  \n      this.grabShadow.style.opacity = 0.5;\n    }\n  }\n  \n  static canDropInto(node, targetNode) {\n    if (!targetNode || !node) return false\n    var targetTag = targetNode.tagName.toLowerCase();  \n    \n    if (lively.isInElement(targetNode, node)) return false; // prevent cycles...\n  \n    var worldContext = lively.findWorldContext(targetNode);    \n    \n    if (node === targetNode) return false\n    var parents = lively.allParents(targetNode, [], true)\n    if (parents.find(ea => ea.isHaloItem )) return false\n    \n    if (parents.find(ea => ea === node)) return false\n    \n    if (!worldContext) return\n    if (worldContext == node) return\n    \n    // if (!(worldContext === document.body)) return false;\n    \n    var result = node !== targetNode &&\n                  !targetNode.isMetaNode &&\n                  !(this.droppingBlacklist[node.tagName.toLowerCase()] || []).includes(targetTag) &&\n                  !(this.droppingBlacklist['*'] || []).includes(targetTag) && \n                  (!targetNode.livelyAcceptsDrop || targetNode.livelyAcceptsDrop(node))\n\n    \n    // a plain shadow root is always a bad sign... \n    // usually there is an explicit content-root or something...    \n    if (worldContext instanceof ShadowRoot) {\n      if (targetNode.localName == \"persistent-code-widget\") {\n        return targetNode\n      }  \n      return \n    }\n    // console.log(\"canDropInto \" + lively.elementToCSSName(targetNode)  \n    //               + \" worldContext \" + worldContext + \" -> \" + result)\n    return result\n  }\n  \n  nodeComesBehind(node, pos) {\n    var bounds = node.getBoundingClientRect()\n    var toTheRight = \n      (bounds.top <= pos.y <= bounds.bottom) && (bounds.left > pos.x);\n    var below = bounds.top > pos.y;\n    return toTheRight || below;\n  }\n  \n  // called after code changes...\n  livelyUpdate() {\n    // this.style.backgroundColor = \"\"\n  }\n  \n}\n\n\n"],"mappings":"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"}