{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-event-sourcing/src/components/halo/lively-halo.js"],"names":["Morph","nodes","events","selecting","pt","rect","Rectangle","preferences","Grid","DragBehavior","svg","svgStrategy","match","target","SVGSVGElement","SVGElement","configureHalo","halo","setHandleVisibility","querySelectorAll","forEach","ea","getPathVertices","p","index","ensureControlPoint","c","dragBehaviorStart","evt","pos","preventDefault","stopPropagation","dragBehaviorMove","defaultStrategy","dragOffset","lively","getPosition","subPt","alignHaloToBounds","setPosition","addPt","fallbackStrategies","Halo","isMetaNode","haloItems","shadowRoot","initialize","undefined","instance","hidden","window","HaloService","targetContext","document","body","parentElement","removeEventListener","addEventListener","onBodyMouseDown","on","whitelistNodes","html","findAllNodes","filter","tagName","b","getBoundingClientRect","bounds","left","top","width","height","globalPosition","containsPoint","length","draggable","shouldHide","visibility","style","resetHaloControlPointItem","remove","resetHaloConfig","get","display","innerHTML","path","isConnector","curveIndex","id","controlPoint","querySelector","createElement","appendChild","setup","showHalo","registerKeys","globalFocus","dispatch","updateTarget","methodName","args","livelyHalo","haloStrategy","call","fallbackStrategy","find","strategy","warn","margin","getGlobalBounds","offset","scrollY","scrollX","scrollTop","Math","abs","scrollLeft","offsetTop","max","offsetLeft","offsetTopDiff","offsetLeftDiff","offsetBottom","min","innerHeight","offsetRight","innerWidth","setGlobalPosition","setExtent","boundsRect","that","showHalos","hideHalos","info","stop","lastIndicator","areHalosActive","halosHidden","Date","now","hideHaloItems","showHaloItems","moveTargetOnEventWithKey","delta","gridSize","altKey","scaleBy","shiftKey","newExtent","getExtent","snapPt","moveBy","showInfoBox","x","y","onLeftDown","onRightDown","onUpDown","onDownDown","migrate","old","initializeHalos"],"mappings":"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","file":"lively-halo.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport * as nodes from 'src/client/morphic/node-helpers.js';\nimport * as events from 'src/client/morphic/event-helpers.js';\nimport selecting from 'src/client/morphic/selecting.js';\nimport {pt, rect, Rectangle} from 'src/client/graphics.js';\nimport preferences from 'src/client/preferences.js';\nimport {Grid} from 'src/client/morphic/snapping.js';\nimport DragBehavior from 'src/client/morphic/dragbehavior.js'\nimport svg from 'src/client/svg.js'\n\n/* globals Halo, that, HaloService */\n\nlet svgStrategy = {\n  match(target) {\n    return target instanceof SVGSVGElement || target instanceof SVGElement;\n  },\n  \n  configureHalo(halo) {\n    halo.setHandleVisibility(true);\n\n    this.querySelectorAll(':not(marker)>path').forEach(ea => {\n      svg.getPathVertices(ea).forEach((p, index) => {\n        halo.ensureControlPoint(ea, index);\n        if (p.c == 'Q') {\n          halo.ensureControlPoint(ea, index, false, 2);\n        }\n      });\n    });\n  },\n  \n  dragBehaviorStart(halo, evt, pos) {\n    evt.preventDefault();\n    evt.stopPropagation();\n  },\n  dragBehaviorMove(halo, evt, pos) {}\n}\n\nlet defaultStrategy = {\n  match(target) {\n    return true;\n  },\n  \n  configureHalo(halo) {},\n  \n  dragBehaviorStart(halo, evt, pos) {\n    halo.dragOffset = lively.getPosition(this).subPt(pos);\n    halo.alignHaloToBounds(this);\n  },\n  dragBehaviorMove(halo, evt, pos) {\n    lively.setPosition(this, pos.addPt(halo.dragOffset));\n    halo.alignHaloToBounds(this);\n  }\n}\n\nlet fallbackStrategies = [svgStrategy, defaultStrategy];\n\n/*\n * Halo, the container for HaloItems\n */\nexport default class Halo extends Morph {\n  \n  get isMetaNode() { return true; }\n  get haloItems() { return this.shadowRoot.querySelectorAll('.halo'); }\n  \n  initialize() {\n    this.shadowRoot.querySelectorAll('*').forEach(ea => {\n      if (ea.isMetaNode === undefined) ea.isMetaNode = true;\n    })\n    // #TODO Refeactor away jQuery in Halo\n    Halo.instance = this;\n    this.hidden = true\n    window.HaloService = Halo;\n    var targetContext = document.body.parentElement;\n    \n    lively.removeEventListener('Halo', document.body);\n    lively.addEventListener('Halo', document.body, 'pointerdown', \n      evt => this.onBodyMouseDown(evt, targetContext));\n\n    this.haloItems.forEach(ea => ea.halo = this);\n    DragBehavior.on(this);\n  }\n  \n  onBodyMouseDown(evt, targetContext) {\n    this.targetContext = targetContext;\n    evt.stopPropagation();\n    var whitelistNodes = lively.html.findAllNodes() // #TODO only find nodes of subelement\n        .filter (ea => ea.tagName == 'INPUT' || \n          ea.tagName == 'LI' || ea.tagName == 'TD' ||\n          ea.tagName == 'P' ||  ea.tagName == 'PRE')\n        .filter (ea => {\n          var b = ea.getBoundingClientRect();\n          var bounds = new Rectangle(b.left, b.top, b.width, b.height) ;\n          var pos = events.globalPosition(evt);\n          // lively.showPoint(bounds.topLeft())\n          // lively.showPoint(pos)\n          return bounds.containsPoint(pos);\n      });\n    // inputFields.forEach( ea => lively.showElement(ea))\n    if (whitelistNodes.length > 0) {\n      // evt.preventDefault();\n      // evt.stopPropagation();\n      document.body.draggable=false; \n      return false;\n    }\n    document.body.draggable=true; \n  }\n  \n  setHandleVisibility(shouldHide) {\n    let visibility = shouldHide ? 'hidden' : null;\n    this.shadowRoot.querySelectorAll('lively-halo-handle-item').forEach(ea => {\n      ea.style.visibility = visibility;\n    });\n  }\n\n  resetHaloControlPointItem() {\n    this.shadowRoot.querySelectorAll('lively-halo-control-point-item')\n      .forEach(ea => ea.remove());\n  }\n  \n  resetHaloConfig() {\n    this.resetHaloControlPointItem();\n    \n    this.get('#default-items').style.display = null;\n    this.get('#vivide-items').style.display = null;\n\n    this.setHandleVisibility(false);\n    \n    this.get('#vivide-outport-connection-items').innerHTML = '';\n    this.get('#vivide-inport-connection-items').innerHTML = '';\n  }\n\n  ensureControlPoint(path, index, isConnector, curveIndex) {\n    var id = 'controlPoint' + index+ (curveIndex ? '-' + curveIndex : '');\n    var controlPoint = this.shadowRoot.querySelector('#' + id);\n    if (!controlPoint) {\n      controlPoint = document.createElement('lively-halo-control-point-item');\n      controlPoint.id = id;\n      this.shadowRoot.appendChild(controlPoint);\n    }\n    controlPoint.isConnector = isConnector;\n    controlPoint.curveIndex = curveIndex;\n    controlPoint.setup(this, path, index);\n    controlPoint.style.visibility= '';\n    return controlPoint;\n  }\n  \n  showHalo(target, path) {\n    document.body.appendChild(this);\n    lively.html.registerKeys(document.body, 'HaloKeys', this);\n    this.hidden = false\n    this.style.display = \"\"\n    \n    if (!target || !target.getBoundingClientRect) { return; }\n    lively.globalFocus();\n  \n    this.alignHaloToBounds(target);\n    \n    this.resetHaloConfig();\n    this.dispatch(target, 'configureHalo');\n    this.haloItems.forEach(ea => {\n      if (ea.updateTarget) {\n        ea.updateTarget(target);\n      }\n    });\n  }\n  \n  dispatch(target, methodName, ...args) {\n    if (!target) { return; }\n\n    // instance-specific handling\n    if(target && target.livelyHalo) {\n      let haloStrategy = target.livelyHalo();\n      if(haloStrategy[methodName]) {\n        haloStrategy[methodName].call(target, this, ...args);\n        return;\n      }\n    }\n    \n    // fallback to generic handlers\n    let fallbackStrategy = fallbackStrategies\n      .find(strategy => strategy[methodName] && strategy.match(target));\n    if(fallbackStrategy) {\n      fallbackStrategy[methodName].call(target, this, ...args);\n    } else {\n      lively.warn('no halo handler found for ' + methodName);\n    }\n  }\n  \n  alignHaloToBounds(target) {\n    const margin = 30;\n    var bounds = lively.getGlobalBounds(target);\n    \n    var offset = {\n      top: bounds.top() +  window.scrollY,  \n      left: bounds.left() +  window.scrollX\n    };\n  \n    // viewport coordinates\n    var scrollTop = Math.abs(window.scrollY);\n    var scrollLeft = Math.abs(window.scrollX);\n    \n\n    // make sure halo respects left and top viewport boundary\n    var offsetTop = Math.max(offset.top - margin, scrollTop);\n    var offsetLeft = Math.max(offset.left - margin, scrollLeft);\n    var offsetTopDiff = offsetTop - offset.top;\n    var offsetLeftDiff = offsetLeft - offset.left;\n    offset.top = offsetTop;\n    offset.left = offsetLeft;\n\n    // make sure halo respects right and bottom viewport boundary\n    var width = bounds.width - offsetLeftDiff + margin;\n    var height = bounds.height - offsetTopDiff + margin;\n    var offsetBottom = Math.min(offset.top + height, scrollTop + window.innerHeight);\n    var offsetRight = Math.min(offset.left + width, scrollLeft + window.innerWidth);\n    width = offsetRight - offsetLeft;\n    height = offsetBottom - offsetTop;\n\n    lively.setGlobalPosition(this, pt(offset.left - scrollLeft, offset.top - scrollTop))\n    lively.setExtent(this, pt(width, height))\n    \n    var boundsRect = lively.getGlobalBounds(that);\n    ['topLeft', 'bottomLeft', 'bottomRight', 'topRight'].forEach(ea => {\n      lively.setGlobalPosition(this.get('#' + ea), boundsRect[ea]());\n    });\n  }\n  \n  static showHalos(target, path) {\n    this.target = target;\n    this.instance.showHalo(target, path);\n  }\n  \n  static hideHalos() {\n    if(this.instance.info) {\n      this.instance.info.stop()\n    }\n    lively.removeEventListener('HaloKeys', document.body)\n    if (HaloService.lastIndicator)\n      HaloService.lastIndicator.remove()\n    if (this.areHalosActive())\n      this.halosHidden = Date.now();\n    lively.setPosition(this.instance, pt(0, 0))\n    this.instance.hidden = true\n  }\n  \n  static hideHaloItems() {\n    this.instance.haloItems.forEach(ea => ea.style.visibility = 'hidden');\n  }\n\n  static showHaloItems() {\n    this.instance.haloItems.forEach(ea => ea.style.visibility = null);\n    \n    // #TODO: this usually called updateHandles\n    //this.instance.showHalo(window.that);\n  }\n  \n  // \n  // Positioning of Elments with arrow keys\n  //\n  \n  /*\n   * Arrow Keys     .... move halo target\n   * holding SHIFT  .... resize halo target\n   * holding ALT    .... align to in bigger steps to grid (resize and move)\n   */\n  moveTargetOnEventWithKey(evt, delta) {\n   var gridSize = lively.preferences.get('GridSize') * 0.25;\n    if (evt.altKey) {\n      delta = delta.scaleBy(gridSize);\n    }\n    \n    if (evt.shiftKey) {\n      var newExtent =lively.getExtent(that).addPt(delta);\n      lively.setExtent(that, newExtent);\n\n      if (evt.altKey) {\n        lively.setExtent(that, Grid.snapPt(lively.getExtent(that), gridSize, gridSize / 2));\n      }\n    } else {\n      lively.moveBy(that, delta);\n      if (evt.altKey) {\n        lively.setPosition(that, Grid.snapPt(lively.getPosition(that), gridSize, gridSize * 0.5));\n      }\n    }\n    evt.preventDefault();\n    evt.stopPropagation();\n    this.alignHaloToBounds(that);\n    \n    if(this.info) {\n      this.info.stop();\n    }\n    this.info = lively.showInfoBox(that);\n\n    if(that) {\n      this.info.innerHTML = `x=${lively.getPosition(that).x} y=${lively.getPosition(that).y} w=${lively.getExtent(that).x} h=${lively.getExtent(that).y}`;\n    }\n  }\n  \n  onLeftDown(evt) {\n    this.moveTargetOnEventWithKey(evt, pt(-1,0));\n  }\n\n  onRightDown(evt) {\n    this.moveTargetOnEventWithKey(evt, pt(1,0));\n  }\n\n  onUpDown(evt) {\n    this.moveTargetOnEventWithKey(evt, pt(0,-1));\n  }\n  \n  onDownDown(evt) {\n    this.moveTargetOnEventWithKey(evt, pt(0,1));\n  }\n\n  // onKeyUp(evt) {\n  //   if(this.info) this.info.stop()\n  // }\n  \n  // Override defdault DragBehavior\n  dragBehaviorStart(evt, pos) {\n    this.dispatch(that, 'dragBehaviorStart', evt, pos);\n  }\n  \n  dragBehaviorMove(evt, pos) {\n    this.dispatch(that, 'dragBehaviorMove', evt, pos);\n  }\n\n  static areHalosActive() {\n    \n    return Halo.instance && (!Halo.instance.hidden && Halo.instance.style.display !== \"none\");\n  }\n  \n  static migrate() {\n    var old = document.querySelector('lively-halo');\n    if (old) {\n      old.remove();\n      lively.initializeHalos();\n    }\n  }\n}\n\nHalo.migrate();\n"]}