{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-portal/src/client/clipboard.js"],"names":["pt","Halo","HaloService","default","uuid","persistence","Clipboard","load","lively","removeEventListener","document","body","addEventListener","evt","onBodyMouseDown","onPaste","onCut","onCopy","setAttribute","clipboard","areHalosActive","that","selection","nodes","length","forEach","ea","remove","hideHalos","nodesToHTML","node","querySelectorAll","livelyPrepareSave","map","outerHTML","join","preventDefault","stopPropagation","undefined","html","clipboardData","setData","initializeElements","all","makeLivelyIdNonConflicting","me","idAttribute","id","getAttribute","otherMe","deeepElementByID","newId","pattern","RegExp","other","i","attributes","attr","value","replace","child","initLivelyObject","getTopLeft","elements","topLeft","getGlobalPosition","minPt","pasteHTMLDataInto","data","container","flat","pos","lastClickPos","div","createElement","classList","add","setExtent","innerHTML","appendChild","setPosition","topLevel","Array","from","zIndexMap","Map","set","style","zIndex","offset","subPt","result","contains","tagName","moveBy","sleep","then","get","childElementCount","setGlobalPosition","height","components","loadUnresolved","pasteTextDataInto","pasteBibtexDataInto","bibtex","setBibtex","pasteFileInto","fileItem","blob","getAsFile","reader","FileReader","onload","event","img","src","target","readAsDataURL","hasGlobalFocus","notify","textData","getData","htmlData","match","lastTarget","items","index","item","kind","highlight","element","_highlight","showElement","border","composedPath","parentElement","find","isEditing","activeElement","shadowRoot","contentEditable","constructor","name","globalFocus","livelyTarget","clientX","clientY"],"mappings":"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","file":"clipboard.js","sourcesContent":["// #Clipboard - Cut,Copy, and Paste for Lively4\n\n/* global that */\n\nimport {pt} from 'src/client/graphics.js';\nimport Halo from \"src/components/halo/lively-halo.js\";\nimport { uuid } from 'utils';\nimport persistence from \"src/client/persistence.js\"\n\nimport {default as HaloService} from \"src/components/halo/lively-halo.js\"\n\nexport default class Clipboard {\n  \n  static load() {\n    lively.removeEventListener(\"Clipboard\", document)\n    lively.removeEventListener(\"Clipboard\", document.body)\n    \n    lively.addEventListener(\"Clipboard\", document, \"mousedown\", evt => this.onBodyMouseDown(evt), true)\n    lively.addEventListener(\"Clipboard\", document.body, \"paste\", evt => this.onPaste(evt), true)\n    lively.addEventListener(\"Clipboard\", document.body, \"cut\", evt => this.onCut(evt))\n    lively.addEventListener(\"Clipboard\", document.body, \"copy\", evt => this.onCopy(evt))\n    \n    document.body.setAttribute(\"tabindex\", 0) // just ensure focusabiltity\n\n    lively.clipboard = Clipboard; // #TODO make cyclic dependencies work\n  }\n  \n  static onCut(evt) {\n    if ((!HaloService.areHalosActive() || !that)) {\n      return;\n    }\n    this.onCopy(evt)\n    if (lively.selection.nodes.length > 0) {\n      lively.selection.nodes.forEach(ea => {\n        ea.remove()\n      })\n      lively.selection.remove()\n       \n    } else {\n      that.remove()\n    }\n    Halo.hideHalos()\n  }\n  \n  static nodesToHTML(nodes) {\n    // prepare for serialization\n    nodes.forEach(node => {\n      node.querySelectorAll(\"*\").forEach( ea => {\n        if (ea.livelyPrepareSave) ea.livelyPrepareSave();\n      });\n    })\n    \n    return nodes.map(ea => ea.outerHTML).join(\"\\n\")\n  }\n  \n  static onCopy(evt) {\n    if ((!HaloService.areHalosActive() || !that)) {\n      return;\n    }\n    evt.preventDefault(); \n    evt.stopPropagation()\n    var nodes = []\n    if (lively.selection.nodes.length > 0) {\n      nodes = lively.selection.nodes\n    } else if ((that !== undefined)) {\n      nodes = [that]\n    }\n    var html = this.nodesToHTML(nodes)\n    evt.clipboardData.setData('text/plain', html);\n    evt.clipboardData.setData('text/html', html);\n  }\n  \n  static initializeElements(all) {\n    function makeLivelyIdNonConflicting(me, all) {\n      const idAttribute = \"data-lively-id\";\n      const id = me.getAttribute(idAttribute);\n      if (!id) { return; }\n\n      // if we have an ID, some other me might be lying around somewhere...\n      const otherMe = lively.deeepElementByID(id);\n      if (!otherMe) { return; }\n\n      // so there is an identiy crisis... so we have to become somebody new...\n      const newId = uuid();\n      me.setAttribute(idAttribute, newId);\n\n      // ... and I have to notify my buddies that I am no longer myself\n      const pattern = new RegExp(id, 'ig');\n      all.forEach(other => {\n        for(let i = 0; i < other.attributes.length; i++) {\n          const attr = other.attributes[i];\n          attr.value = attr.value.replace(pattern, newId);\n        }\n      })\n    }\n    \n    all.forEach(child => makeLivelyIdNonConflicting(child, all));\n    all.forEach(child => persistence.initLivelyObject(child));\n  }\n  \n  static getTopLeft(elements) {\n    var topLeft\n    elements.forEach(ea => {\n      if (!topLeft) \n        topLeft = lively.getGlobalPosition(ea);\n      else\n        topLeft = topLeft.minPt(lively.getGlobalPosition(ea))\n    })\n    return topLeft || pt(0,0)\n  }\n  \n  static pasteHTMLDataInto(data, container, flat, pos=this.lastClickPos) {\n    // add everthing into a container \n    var div = document.createElement(\"div\")\n    div.classList.add(\"lively-content\")\n    lively.setExtent(div, pt(800,10))\n    div.innerHTML = data\n    container.appendChild(div)\n    lively.setPosition(div, pt(0,0))\n    \n    // paste oriented at a shared topLeft\n    var topLevel = Array.from(div.querySelectorAll(\":scope > *\"))\n    var all = Array.from(div.querySelectorAll(\"*\"))\n    \n    this.initializeElements(all)\n    \n    \n    // somehow zIndex gets lost...\n    var zIndexMap = new Map()\n    topLevel.forEach(ea => {\n       zIndexMap.set(ea, ea.style.zIndex)\n    })\n    \n    \n    // topLevel = _.sortBy(topLevel, ea => ea.style && ea.style.zIndex).reverse()\n    // topLevel.forEach(ea => ea.remove())\n    // topLevel.forEach(ea => ea.style.zIndex = \"\")\n    topLevel.forEach(ea => div.appendChild(ea))\n    var offset = (pos || pt(0,0)).subPt(this.getTopLeft(topLevel))\n    var result = div\n    \n    // #TODO #CleanUp\n    \n    topLevel.forEach(child => {\n      if (child.classList.contains(\"lively-content\") || child.tagName == \"LIVELY-WINDOW\") {\n        container.appendChild(child)\n        lively.moveBy(child, offset)\n        result = child; // return last result?\n      }\n    })\n    \n    // restore zIndex in an Async way... it seems focus is responsible for it #Hack\n    lively.sleep(0).then(() => {\n      topLevel.forEach(ea => {\n        ea.style.zIndex = zIndexMap.get(ea)\n      })\n    })\n    \n    // clean up if neccesary\n    \n    if (div.childElementCount == 0) {\n      div.remove() // and get rid of the tmp container\n    } else {\n      // ajust position and content size\n      lively.setGlobalPosition(div, pos || pt(0,0))\n      div.style.height = \"max-content\"\n    }\n    if (flat) {\n      return topLevel\n    }\n    lively.components.loadUnresolved(result, true, \"pasteHTMLDataInto\", true)\n    \n    return result\n  }\n  \n  static pasteTextDataInto(data, container) {\n    var div = document.createElement(\"div\")\n    div.innerHTML = data\n    div.classList.add(\"lively-content\")\n    container.appendChild(div)\n    lively.components.loadUnresolved(div, true, \"pasteHTMLDataInto\", true)\n    lively.setGlobalPosition(div, this.lastClickPos)\n  }\n  \n  static async pasteBibtexDataInto(data, container) {\n    var bibtex = await (<lively-bibtex class=\"lively-content\"></lively-bibtex>)\n    bibtex.setBibtex(data)\n    container.appendChild(bibtex)\n    lively.setGlobalPosition(bibtex, this.lastClickPos)\n  }\n  \n   static pasteFileInto(fileItem, container) {\n    var blob = fileItem.getAsFile();\n    var reader = new FileReader();\n    reader.onload = (event) => {\n      var img = document.createElement(\"img\")\n      img.src = event.target.result\n      img.classList.add(\"lively-content\")\n      container.appendChild(img)\n      lively.setGlobalPosition(img, this.lastClickPos)\n    }; // data url!\n    reader.readAsDataURL(blob);\n  }\n\n  static onPaste(evt) {\n    if (!this.lastClickPos) return; // we don't know where to paste it...this.lastClickPos\n    // lively.notify(\"onPaste in \" + this.lastTarget)\n    \n    if (!lively.hasGlobalFocus()) return\n    \n    evt.stopPropagation()\n    evt.preventDefault(); \n    lively.notify(\"[clipboard] paste\")\n    \n    var textData = evt.clipboardData.getData('text/plain')\n    var htmlData = evt.clipboardData.getData('text/html')\n    \n    // guess it is bibtex? Maybe we should allow pattern matting like in drag and drop?\n    if (textData.match(/@[A-Za-z]+{/)) {\n      return this.pasteBibtexDataInto(textData, this.lastTarget)\n    }\n    \n    if (htmlData) {\n      this.pasteHTMLDataInto(htmlData, this.lastTarget) \n      return \n    }\n \n    \n    if (textData) {\n       this.pasteTextDataInto(textData, this.lastTarget) \n      return \n    }\n    \n    var items = (event.clipboardData || evt.clipboardData).items;\n    if (items.length> 0) {\n      for (var index in items) {\n        var item = items[index];\n        if (item.kind === 'file') {\n          this.pasteFileInto(item, this.lastTarget) \n        }\n      }\n      evt.stopPropagation()\n      evt.preventDefault(); \n      return \n    }\n  }\n\n  static highlight(element) {\n    if (this._highlight) this._highlight.remove()\n    this._highlight = lively.showElement(element)\n    this._highlight.innerHTML = \"\"  + element.id\n    this._highlight.style.border = \"1px solid blue\"\n  }\n\n  static onBodyMouseDown(evt) {\n    var target = evt.composedPath()[0]\n    if (target == document.body.parentElement) target = document.body\n    \n    if(target && target.classList) {\n      if (target.classList.contains(\"lively-no-paste\")) {\n        target = evt.composedPath().find(ea => ea.tagName == \"LIVELY-CONTAINER\")\n      } else {\n        var container = evt.composedPath().find(ea => ea.tagName == \"LIVELY-CONTAINER\")\n        if (container && !container.isEditing()) {\n          target = container\n          var activeElement = container.shadowRoot.activeElement\n          if (activeElement && \n              (activeElement.tagName == \"INPUT\" || activeElement.contentEditable)) {         \n          // the element itself will handle the paste\n            this.lastTarget = null\n            this.lastClickPos = null\n            return \n          }\n        } else {\n            // this.lastTarget = container\n          // } else {\n          if (evt.composedPath().find(ea => ea.constructor.name == \"ShadowRoot\")) { // #TODO is there a better test for the shadow root?\n            // lively.notify(\"shadow\")\n            this.lastTarget = null\n            this.lastClickPos = null\n            return // we are in the shadows\n          }                    \n        }\n        \n      }\n      // this.highlight(target)\n      lively.globalFocus()\n      this.lastTarget = target\n      if (this.lastTarget.livelyTarget) {\n        this.lastTarget = this.lastTarget.livelyTarget()\n        // lively.showElement(this.lastTarget)\n      }\n      this.lastClickPos = pt(evt.clientX,evt.clientY)\n    }\n  }\n}\n\n\nClipboard.load()"]}