{"version":3,"sources":["https://lively-kernel.org/lively4/swt21-debugging/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","Object","defineProperty","window","get","Error","e","showError","configurable","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","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","haloService","initializeHalos"],"mappings":"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","file":"lively-halo.js","sourcesContent":["\"disable deepeval\"\n\nimport 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 that */\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; // #Deprecated\n    Object.defineProperty(window, 'HaloService', {\n      get() {\n        try {\n          throw new Error(\"Using global HaloService property is deprecated\")\n        } catch(e) {\n          lively.showError(e)\n        }\n        return Halo;\n      },\n       configurable: true\n    });\n\n    \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 (Halo.lastIndicator)\n      Halo.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.haloService === Halo\n      lively.initializeHalos();\n    }\n  }\n}\n\nHalo.migrate();\n"]}