{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/reactive/components/basic/jsx-ray.js"],"names":["Morph","cop","events","boundEval","JsxRay","initialize","lively","warn","windowTitle","livelyLoad2","removeEventListener","document","addEventListener","evt","onKeyDown","capture","passive","onKeyUp","keyCode","body","querySelectorAll","forEach","jsxRay","setPickThrough","pickThrough","frame","classList","add","remove","onDragStart","altKey","shiftKey","ctrlKey","isdragging","dragOffset","getPosition","subPt","parentElement","onDrag","onDragStop","setPosition","addPt","ajustRootPosition","onDragHandleStart","handle","onDragHandle","onDragHandleStop","stopPropagation","showHighlight","element","hideHighlight","highlight","showElement","innerHTML","style","border","hoverElement","nodeAncestryList","buildElementListFor","selectElement","showHalo","unhoverElement","hide","onNodeFilterChanged","result","nodeFilter","value","isError","nodeFilterFunc","updateWorld","onEventFilterChanged","eventFilter","eventFilterFunc","filterElements","all","Array","from","filter","ea","tagName","slice","world","addElements","allElements","startHierrachyObservation","removeElements","elements","elementMap","mirrorElement","get","html","removeContextStyleChangeListener","updatePosition","stopHierrachyObservation","obj","visited","Set","isMetaNode","Text","hierrachyObservers","has","observer","disconnect","set","childNodes","shadowRoot","buildMirrorElement","subject","target","length","appendChild","localName","elementMetaData","jsx","aexpr","activeGroup","bounds","getGlobalBounds","setGlobalPosition","topLeft","setExtent","extent","WeakMap","addContextStyleChangeListener","onClose","stopAll","disableEventXRay","registerOnClose","__onCloseObserver","MutationObserver","mutations","mutation","type","removedNodes","dispatchEvent","CustomEvent","observe","childList","addedNodes","frameHandlesLeft","frameHandlesLeftLabel","mirrorWorld","pt","init","maxPt","getGlobalPosition","y","barHeight","node","registerContextStyleObserver","enableEventXRay","logEvent","eventTypeCounter","eventElementCounter","console","log","div","showEvent","fontSize","color","pos","x","xRayLayer","beNotGlobal","logBeforeEvent","disconnectBeforeEvent","Map","registerBeforeEvent","eventXRay","self","map","cbMap","layer","refineClass","HTMLElement","cb","rest","wrappedCB","proceed","counter","func","args","withoutLayers","apply","window","beGlobal","livelyPreMigrate","livelyMigrate","other","livelyInspect","contentNode","inspector","livelyPrepareSave","livelyExample"],"mappings":"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","file":"jsx-ray.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport * as cop from \"src/client/ContextJS/src/contextjs.js\";\nimport events from \"src/client/morphic/events.js\";\nimport boundEval from \"src/client/bound-eval.js\";\n\nexport default class JsxRay extends Morph {\n  async initialize() {\n    lively.warn('initialize')\n    this.windowTitle = \"JSX-Ray\";\n\n    this.livelyLoad2()\n    \n    lively.removeEventListener('jsx-ray', document);\n    lively.addEventListener('jsx-ray', document, 'keydown', evt => JsxRay.onKeyDown(evt), { capture: true, passive: true})\n    lively.addEventListener('jsx-ray', document, 'keyup', evt => JsxRay.onKeyUp(evt), { capture: true, passive: true})\n\n  }\n\n  static onKeyDown(evt) {\n    if (evt.keyCode !== 17 ) { return; } // Control key\n\n    document.body.querySelectorAll('jsx-ray')\n      .forEach(jsxRay => jsxRay.setPickThrough(false));\n  }\n  \n  static onKeyUp(evt) {\n    if (evt.keyCode !== 17 ) { return; } // Control key\n\n    document.body.querySelectorAll('jsx-ray')\n      .forEach(jsxRay => jsxRay.setPickThrough(true));\n  }\n  \n  setPickThrough(pickThrough) {\n    if (pickThrough) {\n      this.frame.classList.add('pickThrough');\n    } else {\n      this.frame.classList.remove('pickThrough');\n    }\n  }\n\n  onDragStart(evt) {\n    if(evt.altKey || evt.shiftKey || evt.ctrlKey) return \n    this.isdragging = true\n    // this.updateWorld()\n    this.dragOffset = lively.getPosition(this).subPt(lively.getPosition(evt))\n    lively.addEventListener('mirror-dragging', document.body.parentElement,'pointermove', evt => this.onDrag(evt));\n    lively.addEventListener('mirror-dragging', document.body.parentElement,'pointerup', evt => this.onDragStop(evt));\n  }\n\n  onDrag(evt) {\n    if(!this.isdragging) return\n    lively.setPosition(this, this.dragOffset.addPt(lively.getPosition(evt)))\n    this.ajustRootPosition()\n  }\n\n  onDragStop(evt) {\n    this.isdragging = false\n    lively.removeEventListener('mirror-dragging', document.body.parentElement)\n  }\n\n  onDragHandleStart(evt) {\n    if(evt.altKey || evt.shiftKey) return \n    this.isdragging = true\n    this.dragOffset = lively.getPosition(this.handle).subPt(lively.getPosition(evt))\n    lively.addEventListener('mirror-dragging', document.body.parentElement,'pointermove', evt => this.onDragHandle(evt));\n    lively.addEventListener('mirror-dragging', document.body.parentElement,'pointerup', evt => this.onDragHandleStop(evt));\n    evt.stopPropagation()\n  }\n\n  onDragHandle(evt) {\n    if(!this.isdragging) return\n    lively.setPosition(this.handle, this.dragOffset.addPt(lively.getPosition(evt)))\n    this.ajustRootPosition()\n    evt.stopPropagation()\n  }\n\n  onDragHandleStop(evt) {\n    this.isdragging = false\n    lively.removeEventListener('mirror-dragging', document.body.parentElement)\n    evt.stopPropagation()\n  }\n  \n  showHighlight(element) {\n    this.hideHighlight();\n    \n    this.highlight = lively.showElement(element, 10000);\n    this.highlight.innerHTML = '';\n    this.highlight.style.border = '1px blue solid';\n    \n    return this.highlight;\n  }\n  \n  hideHighlight() {\n    if (this.highlight) {\n      this.highlight.remove();\n    }\n  }\n\n  hoverElement(element, evt) {\n    this.nodeAncestryList.buildElementListFor(element);\n  }\n  \n  selectElement(element) {\n    lively.showHalo(element);\n  }\n  \n  unhoverElement() {\n    this.nodeAncestryList.hide();\n    this.hideHighlight();\n  }\n  \n  async onNodeFilterChanged() {\n    const result = await boundEval(this.nodeFilter.value);\n    if (!result.isError) {\n      this.nodeFilterFunc = result.value;\n      this.nodeFilter.classList.remove('error')\n      this.updateWorld()\n    } else {\n      this.nodeFilter.classList.add('error')\n    }\n  }\n  \n  // #TODO, #refactor: duplicated code\n  async onEventFilterChanged() {\n    const result = await boundEval(this.eventFilter.value);\n    if (!result.isError) {\n      this.eventFilterFunc = result.value;\n      this.eventFilter.classList.remove('error')\n      this.updateWorld()\n    } else {\n      this.eventFilter.classList.add('error')\n    }\n  }\n  \n  filterElements(all) {\n    if(!this.nodeFilterFunc) {debugger}\n    return Array.from(all)\n      .filter(ea => ea && ea.tagName)\n      .filter(this.nodeFilterFunc)\n      .slice(0, 200)\n  }\n\n  updateWorld() {\n    this.world.innerHTML = \"\"\n    this.addElements(lively.allElements(true))\n    // this.stopHierrachyObservation(document.body)\n\n    this.startHierrachyObservation(document.body)\n  }\n\n  removeElements(elements) {\n    if (!this.elementMap || !elements) return;\n\n    elements.forEach(ea => {\n      if (!ea || !ea.tagName) return;\n      lively.allElements(true, ea).forEach(element => {\n        var mirrorElement = this.elementMap.get(element)\n\n        if (mirrorElement) {\n          // console.log(\"remove\", mirrorElement)\n          lively.html.removeContextStyleChangeListener(ea, mirrorElement.updatePosition)\n          mirrorElement.remove()\n        }\n      })\n    })\n  }\n\n  stopHierrachyObservation(obj, visited = new Set()) {\n    if (obj.isMetaNode) return;\n    if (obj instanceof Text) return\n\n    if (!this.hierrachyObservers) {\n      return // nothing to do\n    }\n    if (visited.has(obj)) return // guard endless loops\n    visited.add(obj)\n    this.removeElements([obj])\n    // console.log(\"stopHierrachyObservation\", obj)\n\n\n    var observer = this.hierrachyObservers.get(obj)\n    if (observer) {\n      observer.disconnect()\n      this.hierrachyObservers.set(obj, null)\n    }\n    // recursively, stop it for all children and its children\n    if (obj.childNodes) {\n      obj.childNodes.forEach(ea => {\n        this.stopHierrachyObservation(ea)\n      })\n    }\n    if (obj.shadowRoot) {\n       this.stopHierrachyObservation(obj.shadowRoot)\n    }\n  }\n\n  buildMirrorElement(subject, all) {\n    const mirrorElement = <div class=\"mirror-element\"></div>;\n    mirrorElement.isMetaNode = true;\n    mirrorElement.target = subject;\n    \n    if (all.length < 200) {\n      mirrorElement.appendChild(<div class=\"element-label\">{subject.localName}</div>);\n    }\n\n    if (subject.elementMetaData) {\n      mirrorElement.classList.add('element-meta-data');\n\n      if (subject.elementMetaData.jsx) {\n        mirrorElement.classList.add('jsx');\n      }\n\n      if (subject.elementMetaData.aexpr) {\n        mirrorElement.classList.add('renders-active-expression');\n      }\n\n      if (subject.elementMetaData.activeGroup) {\n        mirrorElement.classList.add('renders-active-group-item');\n      }\n    }\n\n    mirrorElement.updatePosition = () => {\n      const bounds = lively.getGlobalBounds(subject)\n      lively.setGlobalPosition(mirrorElement, bounds.topLeft())\n      lively.setExtent(mirrorElement, bounds.extent())      \n    }\n\n    mirrorElement.addEventListener(\"mousemove\", evt => {\n      this.hoverElement(subject, evt)\n    })\n\n    mirrorElement.addEventListener(\"mouseout\", evt => {\n      if (evt.ctrlKey) {\n        this.unhoverElement();\n      }\n    })\n        \n    mirrorElement.addEventListener(\"click\", evt => {\n      this.hoverElement(subject, evt);\n      this.selectElement(subject);\n    })\n        \n    return mirrorElement;\n  }\n  \n  addElements(elements) {\n    if (!elements) { return; }\n\n    const all = this.filterElements(elements)\n\n    if (!this.elementMap) {\n      this.elementMap = new WeakMap()\n    }\n\n    // this.label.innerHTML = \" on \" + all.size + \" elements \"\n    all.forEach(subject => {\n      if (subject === this || subject.isMetaNode || subject instanceof Text) { return; }\n      // console.log(\"added \" + subject)\n\n      let mirrorElement = this.elementMap.get(subject)\n\n      if (!mirrorElement) {\n        mirrorElement = this.buildMirrorElement(subject, all);\n\n        this.elementMap.set(subject, mirrorElement)\n        // console.log(\"add\",mirrorElement)\n\n        lively.html.addContextStyleChangeListener(subject, mirrorElement.updatePosition)\n      } \n\n      if (!mirrorElement.parentElement) {\n        this.world.appendChild(mirrorElement)\n      }\n\n      mirrorElement.updatePosition()\n    })\n  }\n\n  onClose() {\n    this.stopAll()\n  }\n  \n  stopAll() {\n    this.stopHierrachyObservation(document.body)\n  \n    this.disableEventXRay()\n  }\n\n  registerOnClose(obj) {\n    if (!obj || !obj.parentElement) return;\n\n    if (obj.__onCloseObserver) obj.__onCloseObserver.disconnect();\n\n    var observer = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {  \n          if(mutation.type == \"childList\") {\n            mutation.removedNodes.forEach(ea => {\n              if (ea == obj) {\n                obj.dispatchEvent(new CustomEvent(\"on-close\"))\n              }  \n            })\n          }\n        });\n      })\n    observer.observe(obj.parentElement, { \n      childList: true,\n    });\n\n    obj.__onCloseObserver = observer\n  }\n\n  startHierrachyObservation(obj, visited=new Set()) {\n    if (obj.isMetaNode) return;\n    if (!obj) return\n    if (obj instanceof Text) return\n\n    if (!this.hierrachyObservers) {\n      this.hierrachyObservers = new WeakMap()\n    }\n    if (visited.has(obj)) return // guard endless loops\n    visited.add(obj)\n    this.addElements([obj])\n\n    var observer = this.hierrachyObservers.get(obj)\n    if (!observer) {\n      // console.log(\"startHierrachyObservation\", obj)\n      observer = new MutationObserver((mutations) => {\n        mutations.forEach((mutation) => {  \n          if(mutation.type == \"childList\") {\n            mutation.removedNodes.forEach(ea => {\n              this.stopHierrachyObservation(ea) \n            })\n            mutation.addedNodes.forEach(ea => {\n              this.startHierrachyObservation(ea)\n            })\n          }\n        });\n      })\n      this.hierrachyObservers.set(obj, observer)\n      observer.observe(obj, { \n        // subtree: true, /* does not go into shadow root, and does not allow to filter */\n        childList: true,\n      });\n\n      // recursively, stop it for all children and its children\n      if (obj.childNodes) {\n        obj.childNodes.forEach(ea => {\n          this.startHierrachyObservation(ea)\n        })\n      }\n      if (obj.shadowRoot) {\n         this.startHierrachyObservation(obj.shadowRoot)\n      }\n    }\n  }\n\n  get frame() { return this.get('#frame'); }\n  get world() { return this.get('#world'); }\n  get nodeFilter() { return this.get('#nodeFilter'); }\n  get eventFilter() { return this.get('#eventFilter'); }\n  get handle() { return this.get('#handle'); }\n  get frameHandlesLeft() { return this.get('#frameHandlesLeft'); }\n  get frameHandlesLeftLabel() { return this.get('#frameHandlesLeftLabel'); }\n  get nodeAncestryList() { return this.get('#nodeAncestryList'); }\n\n  mirrorWorld() {\n    this.frame.isMetaNode = true\n    lively.setExtent(this.frame, lively.pt(300,300))\n    lively.setPosition(this.frame, lively.pt(0,0))\n\n    this.world.isMetaNode = true\n\n    this.nodeFilter.isMetaNode = true\n    this.nodeFilter.addEventListener(\"keyup\", evt => {\n      if (evt.keyCode == 13) { // ENTER\n        this.onNodeFilterChanged();\n      }\n    });\n\n    this.eventFilter.isMetaNode = true\n    this.eventFilter.addEventListener(\"keyup\", evt => {\n      if (evt.keyCode == 13) { // ENTER\n        this.onEventFilterChanged();\n      }\n    });\n\n    this.handle.isMetaNode = true\n    lively.addEventListener('dragging', this.handle, 'pointerdown', evt => this.onDragHandleStart(evt));\n\n    this.frameHandlesLeft.isMetaNode = true\n    lively.setExtent(this.frameHandlesLeft, lively.pt(10,300))\n    lively.setPosition(this.frameHandlesLeft, lively.pt(-10,-20))\n    lively.addEventListener('dragging', this.frameHandlesLeft, 'pointerdown', evt => this.onDragStart(evt));\n\n    this.frameHandlesLeftLabel.isMetaNode = true\n\n    lively.warn('reset')\n    this.nodeAncestryList.isMetaNode = true\n    this.nodeAncestryList.init(this)\n    \n    this.ajustRootPosition()\n    this.updateWorld()\n  }\n\n  ajustRootPosition() {\n    const extent = lively.getPosition(this.handle).maxPt(lively.pt(200,200))\n    lively.setPosition(this.handle, extent)\n\n    lively.setGlobalPosition(this.world, lively.getGlobalPosition(document.body))\n    lively.setExtent(this.frame, extent)\n\n    lively.setExtent(this.frameHandlesLeft, lively.pt(10,extent.y + 20))\n\n    var barHeight = extent.y + 20\n    lively.setExtent(this.frameHandlesLeft, lively.pt(20, barHeight))\n    lively.setPosition(this.frameHandlesLeftLabel, lively.pt(0, barHeight - 10))\n}\n\n  livelyLoad2() {\n    this.cop = cop;\n    this.events = events;\n    \n    this.nodeFilterFunc = node => node.elementMetaData; // ea.tagName && ea.tagName.match(/-/)\n    this.eventFilterFunc = (obj, type, evt) => type === 'mousedown';\n\n    this.registerOnClose(this)\n    lively.removeEventListener(\"self\", this)\n    lively.addEventListener(\"self\", this, \"on-close\", () => this.onClose())\n\n    this.mirrorWorld()\n    lively.html.registerContextStyleObserver(document.body, \"XRay\")\n    // lively.html.disconnectContextStyleObserver(document.body, \"XRay\")  \n\n    this.enableEventXRay()\n  }\n\n  logEvent(obj, type, evt) {\n    if (obj.isMetaNode) return;\n    if (obj === this) return;\n    if (!this.eventFilterFunc || !this.eventFilterFunc(obj, type, evt)) { return; }\n\n    this.eventTypeCounter.set(type, (this.eventTypeCounter.get(type) || 0) + 1)\n    this.eventElementCounter.set(this, (this.eventElementCounter.get(obj) || 0) + 1)\n    // // this.limit = 100\n    // if (!this.limit || this.limit <= 0) {\n    //   return\n    // } \n    // this.limit -= 1\n    console.log(\"evt\", evt)\n\n    var div = lively.showEvent(evt)\n    div.style.fontSize = \"8px\"\n    div.style.color = \"blue\"\n    // div.style.width = \"max-content\";\n    div.innerHTML = type + ' ' + evt.target\n    div.isMetaNode = true\n    var pos = lively.getGlobalPosition(div)\n\n    this.world.appendChild(div)\n    if (pos.x == 0 && pos.y == 0) { // keyboard events... etc.\n      lively.setGlobalPosition(div, lively.getGlobalPosition(obj))\n    } else {\n      lively.setGlobalPosition(div, pos)\n    }\n\n  }\n  disableEventXRay() {\n    if (this.xRayLayer) {\n      this.xRayLayer.beNotGlobal()\n    }\n    if (this.events && this.logBeforeEvent) {\n      this.events.disconnectBeforeEvent(this.logBeforeEvent)\n    }\n  }\n\n  enableEventXRay() {\n    if (!this.events) return;\n\n    this.disableEventXRay()\n\n    this.eventElementCounter = new WeakMap()\n    this.eventTypeCounter= new Map()\n\n    this.logBeforeEvent = (obj, type, evt) => this.logEvent(obj, type, evt)\n    this.events.registerBeforeEvent(this.logBeforeEvent)\n\n    // ------------- old non-event xray -----------\n    \n    this.eventXRay = true\n    this.eventElementCounter = new WeakMap()\n    this.eventTypeCounter= new Map()\n\n    if (this.xRayLayer) {\n      this.xRayLayer.beNotGlobal()\n    }\n\n    var cop = this.cop\n    var self = this\n    var map = this.elementMap || new Map() \n\n    if (!this.cbMap) {\n      this.cbMap = new WeakMap()\n    }\n    var cbMap = this.cbMap\n\n    var layer = cop.layer(\"EventListener\")\n    layer.refineClass(HTMLElement, {\n      removeEventListener(type, cb, ...rest) {\n        var wrappedCB = cbMap.get(cb) // we have to keep the illusion\n        return cop.proceed(type, wrappedCB || cb, ...rest)\n      },\n\n      addEventListener(type, cb, ...rest) {\n        // console.log(\"addEventListener \" + type)\n        // we cannot just wrapp a callback cb, because callbacks are also used in removeEventListener...\n        var counter = 0\n        var func = cbMap.get(cb) || (function(...args) {\n          // console.log('func ' + type)\n\n          cop.withoutLayers([layer], () => {\n            if (this.isMetaNode) return;\n            self.eventTypeCounter.set(type, (self.eventTypeCounter.get(type) || 0) + 1)\n            self.eventElementCounter.set(this, (self.eventElementCounter.get(this) || 0) + 1)\n            if (self.elementMap) {\n              var mirrorElement = self.elementMap.get(this)\n              var evt = args[0]\n              if (mirrorElement && evt) {\n                var div = lively.showEvent(evt)\n                div.style.fontSize = \"8px\"\n                div.style.color = \"blue\"\n                div.innerHTML = type + \"_\" + counter\n                div.isMetaNode = true\n                var pos = lively.getGlobalPosition(div)\n                mirrorElement.appendChild(div)\n                console.log(\"evt\", evt, \"pos\", pos)\n                if (pos.x == 0 && pos.y == 0){ // keyboard events... etc.\n                  lively.setPosition(div, lively.pt(0, 20 * (counter++ % 40)))\n                } else {\n                  lively.setGlobalPosition(div, pos)\n                }\n              }\n            }    \n          })\n          return cb.apply(this, args)\n        }) \n        cbMap.set(cb, func)\n        cop.proceed(type, func, ...rest) \n      }\n    })\n    this.xRayLayer = layer\n    window.xRayLayer =  this.xRayLayer\n    this.xRayLayer.beGlobal()\n  }\n  \n  /* Lively-specific API */\n\n  livelyPreMigrate() {\n    // is called on the old object before the migration\n  }\n  \n  livelyMigrate(other) {\n    this.stopAll();\n    \n    this.nodeFilter.value = other.nodeFilter.value;\n    this.eventFilter.value = other.eventFilter.value;\n\n    lively.setPosition(this.handle, lively.getPosition(other.handle));\n    this.ajustRootPosition();\n  }\n  \n  livelyInspect(contentNode, inspector) {\n  }\n  \n  livelyPrepareSave() {\n  }\n  \n  async livelyExample() {\n  }\n}"]}