{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-markus/src/client/draganddrop.js"],"names":["pt","debounce","through","asDragImageFor","getObjectFor","removeTempKey","letsScript","MicrosoftAcademicEntities","Strings","applyDragCSSClass","addEventListener","evt","classList","add","remove","appendToContainerAt","node","dropOnDocumentBehavior","openAt","DropOnBodyHandler","constructor","mimeType","handler","handle","dt","dataTransfer","types","includes","element","getData","then","r","findDropContext","path","container","document","body","find","ea","contains","localName","DropElementHandler","customHandler","handleElement","composedPath","appendChild","lively","setGlobalPosition","getPosition","lastDragOffset","moveBy","tempKey","cb","removeListeners","removeEventListener","load","onDragOver","onDrop","handlers","dataTempKey","data","viewTempKey","sourceView","icon","offset","JSON","parse","clientX","clientY","subPt","knotURL","create","urlString","match","openInspector","getGlobalPosition","existing","querySelector","notify","infoSpan","link","info","m","matchAll","id","raw","files","loadJSON","entity","entities","type","getEntityType","Ty","label","innerHTML","preventDefault","stopPropagation","openBrowser","replace","elementByID","parentElement","text","comp","updateView","entries","querySelectorAll","length","style","width","htmlString","div","target","lastDropTarget","lastDropTargetHighlight","Array","from","showElement","handleFiles","forEach","file","extension","name","ctrlKey","reader","FileReader","onload","event","dataURL","result","img","readAsDataURL","item","url","readBlobAsDataURL","cssText","split","pair","value","warn","__unload__"],"mappings":"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","file":"draganddrop.js","sourcesContent":["import { pt } from 'src/client/graphics.js';\nimport { debounce, through, asDragImageFor, getObjectFor, removeTempKey } from \"utils\";\nimport { letsScript } from 'src/client/vivide/vivide.js';\nimport { MicrosoftAcademicEntities} from \"src/client/literature.js\"\nimport Strings from \"src/client/strings.js\"\n\n\nexport function applyDragCSSClass() {\n  this.addEventListener('dragenter', evt => this.classList.add(\"drag\"), false);\n  this.addEventListener('dragleave', evt => this.classList.remove(\"drag\"), false);\n  this.addEventListener('drop', evt => this.classList.remove(\"drag\"));\n}\n\nfunction appendToContainerAt(node, evt) {\n  dropOnDocumentBehavior.openAt(node, evt)\n  // document.body.appendChild(node);\n  // lively.setGlobalPosition(node, pt(evt.clientX, evt.clientY));\n}\n\n\n//class DataTransferItemHandler {\n//  handle() {\n//    \n//  }\n//}\n\nclass DropOnBodyHandler {\n  constructor(mimeType, handler) {\n    this.mimeType = mimeType;\n    this.handler = handler;\n  }\n  \n  handle(evt) {\n    const dt = evt.dataTransfer;\n    if(!dt.types.includes(this.mimeType)) { return false; }\n    \n    const element = this.handler(dt.getData(this.mimeType));\n    if(element) {\n      if(element.then) {\n        element.then( r => {\n          appendToContainerAt(r, evt);  \n        })\n      } else {\n        appendToContainerAt(element, evt);\n      }\n      return true;\n    } else {\n      return false;\n    }\n  }\n}\n\nfunction findDropContext(element, path, container=document.body) {\n  return path.find(ea => {\n    return ea && (ea === container || (ea.classList && ea.classList.contains(\"lively-content\")) || ea.localName == \"lively-folder\")\n  }) || container\n}\n\n\n// drop and a dragged html element into a container\nexport class DropElementHandler {\n  constructor(container, customHandler) {\n    this.container = container;\n    if (customHandler) {\n      this.handleElement = customHandler\n    }\n  }\n  \n  handleElement(element, evt) {\n    var container = findDropContext(element, evt.composedPath(), this.container)\n    container.appendChild(element)\n    lively.setGlobalPosition(element, lively.getPosition(evt))\n    if (element.lastDragOffset) {\n      lively.moveBy(element, element.lastDragOffset)\n    }\n  }\n  \n  handle(evt) {\n    const dt = evt.dataTransfer\n    if(!dt.types.includes(\"lively/element\")) { return false }\n    const tempKey = dt.getData(\"lively/element\")\n    const element = getObjectFor(tempKey)\n    if (!element) return false\n    \n    this.handleElement(element, evt)\n    \n    removeTempKey(tempKey)\n    return true\n  }\n  \n  static handle(evt, container, cb) {\n    new this(container, cb).handle(evt)\n  }\n}\n\nconst dropOnDocumentBehavior = {\n  \n  removeListeners() {\n    lively.removeEventListener(\"dropOnDocumentBehavior\", document);\n  },\n  \n  load() {\n    // #HACK: we remove listeners here, because this module is called three times (without unloading in between!!)\n    this.removeListeners();\n    lively.addEventListener(\"dropOnDocumentBehavior\", document, \"dragover\", ::this.onDragOver);\n    lively.addEventListener(\"dropOnDocumentBehavior\", document, \"drop\", ::this.onDrop);\n    \n    this.handlers = [\n      // lively elements\n      new DropElementHandler(document.body),\n      // {\n      //   handle(evt) {\n      //     const dt = evt.dataTransfer;\n      //     if(!dt.types.includes(\"lively/element\")) { return false; }\n      //     const tempKey = dt.getData(\"lively/element\");\n      //     const element = getObjectFor(tempKey);\n      //     if (!element) return false;\n      //     document.body.appendChild(element)\n      //     lively.setGlobalPosition(element, lively.getPosition(evt))\n      //     if (element.lastDragOffset) {\n      //       lively.moveBy(element, element.lastDragOffset)\n      //     }\n      //     removeTempKey(tempKey);\n      //     return true;\n      //   }\n      // },\n      // vivide list\n      {\n        handle(evt) {\n          const dt = evt.dataTransfer;\n          if(!dt.types.includes(\"vivide\")) { return false; }\n          if(!dt.types.includes(\"javascript/object\")) { return false; }\n          const dataTempKey = dt.getData(\"javascript/object\");\n          const data = getObjectFor(dataTempKey);\n          const viewTempKey = dt.getData(\"vivide/source-view\");\n          const sourceView = getObjectFor(viewTempKey);\n          getObjectFor\n          letsScript(data, evt, sourceView);\n          return true;\n        }\n      },\n\n      // move a desktop item\n      {\n        handle(evt) {\n          const dt = evt.dataTransfer;\n          if(!dt.types.includes(\"desktop-icon/object\")) { return false; }\n          const tempKey = dt.getData(\"desktop-icon/object\");\n          const icon = getObjectFor(tempKey);\n          removeTempKey(tempKey);\n\n          const offset = dt.types.includes(\"desktop-icon/offset\") ?\n            JSON.parse(dt.getData(\"desktop-icon/offset\")) :\n            pt(0, 0);\n          lively.setGlobalPosition(icon, pt(evt.clientX, evt.clientY).subPt(offset));\n          return true;\n        }\n      },\n\n      // knot/url to desktop item\n      {\n        handle(evt) {\n          const dt = evt.dataTransfer;\n          if(!dt.types.includes(\"knot/url\")) { return false; }\n          const knotURL = dt.getData(\"knot/url\");\n\n          lively.create('knot-desktop-icon')\n            .through(icon => lively.setGlobalPosition(icon, pt(evt.clientX, evt.clientY)))\n            .then(icon => icon.knotURL = knotURL);\n\n          return true;\n        }\n      },\n      \n      new DropOnBodyHandler('text/uri-list', urlString => {\n        if (!urlString.match(/^data\\:image\\/png/)) { return false; }\n        \n        return <img class=\"lively-content\" src={urlString}></img>;\n      }),\n      \n      // open javascript/object in inspector\n      {\n        handle(evt) {\n          const dt = evt.dataTransfer;\n          if(!dt.types.includes(\"javascript/object\")) { return false; }\n          const tempKey = dt.getData(\"javascript/object\");\n          \n          lively.openInspector(getObjectFor(tempKey), pt(\n            evt.clientX,\n            evt.clientY).subPt(lively.getGlobalPosition(document.body)));\n          removeTempKey(tempKey);\n\n          return true;\n        }\n      },\n\n      new DropOnBodyHandler('text/uri-list', urlString => {\n        if (!urlString.match(/^plex:\\//)) { return false; }\n        var existing = document.body.querySelector(`plex-link[src=\"${urlString}\"]`)\n        if (existing) {\n          existing.remove()\n        }\n        lively.notify(\"dropped \" + urlString)\n        return <plex-link src={urlString}></plex-link>\n      }),\n\n      // #ExampleForLeo #Bibilograpy #TODO #Refactor\n      new DropOnBodyHandler('text/uri-list', urlString => {\n        if (!urlString.match(/^academic:\\//)) { return false; }\n        lively.notify(\"academic \" + urlString)\n        \n        var infoSpan = <div id=\"info\"></div>\n        var link = <div class=\"lively-content\" style=\"background-color: lightgray; border:1px solid orange\"><a  href={urlString}>\n            {urlString}  \n        </a>{infoSpan}</div>;\n        \n        (async () => {\n          let info = \"\";\n          for(var m of Strings.matchAll(/[Ii]d=([0-9]+)/, urlString)) {\n            let id = m[1]\n            let raw  = await lively.files.loadJSON(`academic://raw:Id=${id}?attr=AuN,Ty,AA.AuN,Y,Ti,FN`)\n\n            var entity = raw.entities[0]\n            var type = MicrosoftAcademicEntities.getEntityType(entity.Ty)\n            var label = \"\"\n            if(type ==\"author\") { \n              label = entity[\"AuN\"]\n            } else if(type == \"field-of-study\") { \n              label =  entity[\"FN\"] \n            } else if(type ==\"paper\") { \n              label =  entity[\"Ti\"] \n            }\n\n            info += `<span>${id}: ${type}, ${label}</span><br>` \n          }\n          infoSpan.innerHTML = info\n        })()\n        \n        // register the event... to be able to remove it again...\n        lively.addEventListener(\"link\", link, \"click\", evt => {\n          // #TODO make this bevior persistent?\n          evt.preventDefault();\n          evt.stopPropagation();\n          lively.openBrowser(urlString);\n          return true;\n        })\n        return link\n      }),\n      \n      \n      new DropOnBodyHandler('text/uri-list', urlString => {\n        \n        var link = <div class=\"lively-content\"><a  href={urlString}>\n          {urlString.replace(/\\/$/,\"\").replace(/.*\\//,\"\")}\n        </a></div>;\n        // register the event... to be able to remove it again...\n        lively.addEventListener(\"link\", link, \"click\", evt => {\n          // #TODO make this bevior persistent?\n          evt.preventDefault();\n          evt.stopPropagation();\n          lively.openBrowser(urlString);\n          return true;\n        })\n        return link\n      }),\n\n        new DropOnBodyHandler('application/lively4id', id => {\n        var element = lively.elementByID(id)\n    \n        if (element && \n            (element.parentElement === document.body) /* move element */) {          \n          return element\n        }\n        \n        lively.notify(\"drop id:\" + id)\n    \n        return false\n      }),\n  \n      new DropOnBodyHandler('text/plain', async text => {\n        // test for bibtex content\n         if (text.match(/^\\s*@[a-zA-Z]+\\{/)) {          \n            const comp = await (<lively-bibtex style=\"width:700px\"></lively-bibtex>);\n            comp.innerHTML = text;\n            await comp.updateView();\n            var entries = comp.querySelectorAll(\"lively-bibtex-entry\")\n             if (entries.length == 1) {\n                entries[0].style.width = \"700px\"\n                return entries[0]\n             }\n            return comp\n        }\n        return false\n      }),\n  \n  \n      new DropOnBodyHandler('text/html', htmlString => {\n        const div = <div></div>;\n        div.innerHTML = htmlString;\n\n        return div;\n      }),\n  \n  \n      new DropOnBodyHandler('text/plain', text => {\n        return <p>{text}</p>;\n      }),\n\n      // just an ui interaction, no data\n      {\n        handle(evt) {\n          return evt.dataTransfer.types.includes(\"ui/interaction\");\n        }\n      }\n    ];\n  },\n  \n  openAt(node, evt) {  \n    var target = this.lastDropTarget || document.body\n    target.appendChild(node);\n    lively.setGlobalPosition(node, pt(evt.clientX, evt.clientY));\n    if (this.lastDropTargetHighlight) this.lastDropTargetHighlight.remove()\n  },\n\n\n  \n  \n  onDragOver(evt) {\n    this.lastDropTarget = Array.from(evt.composedPath())\n      .find(ea => ea && ((ea.classList && ea.classList.contains(\"lively-content\")) || ea.localName == \"lively-folder\"))\n    if (this.lastDropTargetHighlight) this.lastDropTargetHighlight.remove()\n    this.lastDropTargetHighlight = lively.showElement(this.lastDropTarget)\n    \n    evt.stopPropagation();\n    evt.preventDefault();\n  },\n\n  handleFiles(evt) {\n    const files = evt.dataTransfer.files;\n\n    if(files.length === 0) { return false; }\n\n    lively.notify(`Dropped ${files.length} file(s).`);\n    Array.from(files).forEach(async (file) => {\n        const extension = lively.files.extension(file.name)\n        // #Research how do we deal with content vs. container... drop a picture here or a file that contains the picture? #Journal #Interesting\n        if (extension == \"png\" && !evt.ctrlKey) {\n            // #Refactor #TODO use lively.files.readBlobAsDataURL\n            const reader = new FileReader();\n            reader.onload = event => {\n              const dataURL = event.target.result.replace(/^data\\:image\\/png;/, `data:image/png;name=${file.name};`);\n              const img = <img class=\"lively-content\" src={dataURL}></img>;\n              appendToContainerAt(img, evt);\n            };\n            reader.readAsDataURL(file); \n        } \n        // else if (extension == \"html\") {\n        //   var source = await lively.files.readBlobAsText(file)\n        //   lively.clipboard.pasteHTMLDataInto(source, document.body, false, lively.getPosition(evt));\n        // } \n        else {          \n          var item = await (<lively-file></lively-file>)\n          item.classList.add(\"lively-content\") // for persistence\n          // #TODO check for existing \"file\"\n          item.name = file.name\n          this.openAt(item, evt);\n          item.url = await lively.files.readBlobAsDataURL(file) \n        }\n      });\n    return true;\n  },\n  \n  async onDrop(evt) {\n    // var target = evt.composedPath().find(ea => ea.classList.contains(\"lively-content\") )\n    const dt = evt.dataTransfer;\n    \n    /*\n    console.group(\"Drop Event on body\");\n    console.log(dt);\n    console.log(`#files ${dt.files.length}`);\n    console.log(Array.from(dt.items));\n    lively.notify(Array.from(dt.types).join(\" \"));\n    console.groupEnd();\n    */\n\n    evt.stopPropagation();\n    evt.preventDefault();\n    \n    if(this.handleFiles(evt)) { return; }\n\n    if(Array.from(dt.types).length > 0) {\n      if(this.handlers.find(handler => handler.handle(evt))) {\n        return;\n      }\n    }\n    var cssText = evt.dataTransfer.getData(\"lively/cssText\")\n    if (this.lastDropTarget && cssText) {\n      cssText.split(/; */).forEach(pair => {\n        var name, value;\n        [name,value] = pair.split(/: */)\n        lively.notify(\"set \" + this.lastDropTarget + \"'s \" + name + \" to \" + value)\n        name = name.replace(/ /g,\"\")\n        this.lastDropTarget.style[name] = value\n        // window.LastDT = this.lastDropTarget\n        // window.LastName = name\n        // window.LastCSS = value\n        // target.style[\"background\"] = \"red\"\n      })\n    } else {  \n      lively.warn(\"Dragged content contained neither files nor handled items\");\n    }\n    \n  }\n}\n\nexport function __unload__() {\n  dropOnDocumentBehavior.removeListeners();\n}\n\ndropOnDocumentBehavior.load()"]}