{"version":3,"sources":["https://lively-kernel.org/lively4/swt21-debugging/src/client/draganddrop.js"],"names":["pt","debounce","through","asDragImageFor","getObjectFor","removeTempKey","letsScript","MicrosoftAcademicEntities","Strings","__unload__","findDropContext","appendToContainerAt","applyDragCSSClass","addEventListener","evt","classList","add","remove","node","dropOnDocumentBehavior","openAt","DropOnBodyHandler","constructor","mimeType","handler","handle","dt","dataTransfer","types","includes","element","getData","then","r","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"],"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()"]}