{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/components/widgets/lively-component-bin-tile.js"],"names":["Morph","componentLoader","preferences","ContextMenu","pt","ComponentBinTile","initialize","addEventListener","evt","onDblClick","onDragStart","onDrag","onDragEnd","onKeyUp","draggable","setAttribute","onContextMenu","configure","config","setComponentName","name","thumbnailName","template","replace","lively","components","searchTemplateFilename","then","url","setThumbnail","setTooltip","description","htmlTag","shiftKey","stopPropagation","preventDefault","menu","onMoveComponent","openIn","document","body","path","get","src","getThumbnailPath","string","title","innerHTML","setBin","componentBin","comp","createComponent","appendChild","bounds","getBoundingClientRect","setGlobalPosition","getPosition","setupComponent","livelyExample","worldContext","create","component","pos","getGlobalPosition","inWindow","wantsOpenInWindow","dragOffset","openInWindow","win","parentElement","remove","subPt","getExtent","scaleBy","img","createElement","dataTransfer","setDragImage","dragTargetPromise","dragTarget","clientX","clientY","addPt","target","event","keyCode","left","top","close","focus","notify","newUrl","prompt","files","moveFile","jsUrl","newJsUrl","existFile","pngUrl","newPngUrl","style","width","height","livelyMigrate","other"],"mappings":";;;;;;;;;AAAOA,W;;AACAC,qB;;AACAC,iB;;AACAC,iB;;AACCC,Q,wBAAAA,E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,YAAMC,gBAAN,SAA+BL,KAA/B,CAAqC;;AAElDM,qBAAa;AACX,eAAKC,gBAAL,CAAsB,UAAtB,EAAkCC,OAAO,KAAKC,UAAL,CAAgBD,GAAhB,CAAzC;AACA,eAAKD,gBAAL,CAAsB,WAAtB,EAAmCC,OAAO,KAAKE,WAAL,CAAiBF,GAAjB,CAA1C;AACA,eAAKD,gBAAL,CAAsB,MAAtB,EAA8BC,OAAO,KAAKG,MAAL,CAAYH,GAAZ,CAArC;AACA,eAAKD,gBAAL,CAAsB,SAAtB,EAAiCC,OAAO,KAAKI,SAAL,CAAeJ,GAAf,CAAxC;AACA,eAAKD,gBAAL,CAAsB,OAAtB,EAA+BC,OAAO,KAAKK,OAAL,CAAaL,GAAb,CAAtC;AACA,eAAKM,SAAL,GAAiB,IAAjB;AACA,eAAKC,YAAL,CAAkB,UAAlB,EAA8B,CAA9B;AACA,eAAKR,gBAAL,CAAsB,aAAtB,EAAsCC,OAAO,KAAKQ,aAAL,CAAmBR,GAAnB,CAA7C,EAAsE,KAAtE;AACD;;AAEDS,kBAAUC,MAAV,EAAkB;AAChB,eAAKA,MAAL,GAAcA,MAAd;AACA,eAAKC,gBAAL,CAAsBD,OAAOE,IAA7B;AACA,cAAIC,gBAAgBH,OAAOI,QAAP,CAAgBC,OAAhB,CAAwB,OAAxB,EAAgC,KAAhC,CAApB;;AAEAC,iBAAOC,UAAP,CAAkBC,sBAAlB,CAAyCL,aAAzC,EAAwDM,IAAxD,CAA8DC,OAAO;AACnE,gBAAIA,GAAJ,EAAS;AACP,mBAAKC,YAAL,CAAkBD,GAAlB;AACD;AACF,WAJD;;AAMA,eAAKE,UAAL,CAAgBZ,OAAOa,WAAvB;AACA,eAAKC,OAAL,GAAed,OAAO,UAAP,CAAf;AACD;;AAEDF,sBAAcR,GAAd,EAAmB;AACjB,cAAI,CAACA,IAAIyB,QAAT,EAAmB;AACjBzB,gBAAI0B,eAAJ;AACA1B,gBAAI2B,cAAJ;;AAEA,gBAAIC,OAAO,IAAIjC,WAAJ,CAAgB,IAAhB,EAAsB,CAC7B,CAAC,MAAD,EAAS,MAAM,KAAKkC,eAAL,CAAqB7B,GAArB,CAAf,CAD6B,CAAtB,CAAX;AAGA4B,iBAAKE,MAAL,CAAYC,SAASC,IAArB,EAA2BhC,GAA3B,EAAgC,IAAhC;AACA,mBAAO,IAAP;AACD;AACF;;AAEDqB,qBAAaY,IAAb,EAAmB;AACjB,eAAKC,GAAL,CAAS,KAAT,EAAgBC,GAAhB,GAAsBF,IAAtB;AACD;;AAEDG,2BAAmB;AACjB,iBAAO,KAAKF,GAAL,CAAS,KAAT,EAAgBC,GAAvB;AACD;;AAEDb,mBAAWe,MAAX,EAAmB;AACjB,eAAKH,GAAL,CAAS,KAAT,EAAgBI,KAAhB,GAAwBD,MAAxB;AACD;;AAED1B,yBAAiBC,IAAjB,EAAuB;AACrB,eAAKsB,GAAL,CAAS,GAAT,EAAcK,SAAd,GAA0B3B,IAA1B;AACD;;AAED4B,eAAOC,YAAP,EAAqB;AACnB,eAAKA,YAAL,GAAoBA,YAApB;AACD;;AAED,cAAMxC,UAAN,CAAiBD,GAAjB,EAAsB;AACpB,cAAI0C,OAAQ,MAAM,KAAKC,eAAL,CAAqB3C,GAArB,CAAlB;AACA+B,mBAASC,IAAT,CAAcY,WAAd,CAA0BF,IAA1B;AACA,cAAIG,SAAS,KAAKJ,YAAL,CAAkBK,qBAAlB,EAAb;AACA9B,iBAAO+B,iBAAP,CAAyBL,IAAzB,EAA+B1B,OAAOgC,WAAP,CAAmBhD,GAAnB,CAA/B;AACD;;AAEDiD,uBAAeP,IAAf,EAAqB;AACnB,cAAIA,KAAKQ,aAAT,EAAwBR,KAAKQ,aAAL;AACzB;;AAGD,cAAMP,eAAN,CAAsB3C,GAAtB,EAA2B;AACzB,cAAImD,eAAepB,SAASC,IAA5B;AACA,cAAIU,OAAO,yBAAM1B,OAAOoC,MAAP,CAAc,KAAK5B,OAAnB,EAA4B2B,YAA5B,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAX;AACA,eAAKE,SAAL,GAAiBX,IAAjB;AACA,cAAIY,MAAMtC,OAAOuC,iBAAP,CAAyB,IAAzB,CAAV;;AAEA,cAAK,KAAKd,YAAL,IAAqB,KAAKA,YAAL,CAAkBe,QAAlB,EAAtB,IAAuDd,KAAKe,iBAAhE,EAAmF;AACjF,iBAAKC,UAAL,GAAkB9D,GAAG,CAAC,GAAJ,EAAQ,CAAC,EAAT,CAAlB;AACA,mBAAOH,gBAAgBkE,YAAhB,CAA6BjB,IAA7B,EAAmCvB,IAAnC,CAAwCyC,OAAO;AACpD5C,qBAAO+B,iBAAP,CAAyBL,KAAKmB,aAA9B,EAA6CP,GAA7C;;AAEA,mBAAKL,cAAL,CAAoBP,IAApB;AACAA,mBAAKmB,aAAL,CAAmBC,MAAnB;;AAEA,qBAAOpB,KAAKmB,aAAZ;AACD,aAPM,CAAP;AAQD,WAVD,MAUO;AACL,iBAAKH,UAAL,GAAkB9D,GAAG,CAAH,EAAK,CAAL,CAAlB;AACA,iBAAKqD,cAAL,CAAoBP,IAApB;AACA1B,mBAAO+B,iBAAP,CAAyBL,IAAzB,EAA+BY,IAAIS,KAAJ,CAAU/C,OAAOgD,SAAP,CAAiBtB,IAAjB,EAAuBuB,OAAvB,CAA+B,GAA/B,CAAV,CAA/B;AACA,mBAAOvB,IAAP;AAED;AACF;;AAED,cAAMxC,WAAN,CAAkBF,GAAlB,EAAuB;AACrB,cAAIkE,yBAAMnC,SAASoC,aAAT,CAAuB,KAAvB,CAAN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,YAAJ;AACAD,cAAI/B,GAAJ,GAAU,KAAKC,gBAAL,EAAV;AACApC,cAAIoE,YAAJ,CAAiBC,YAAjB,CAA8BH,GAA9B,EAAmC,CAAnC,EAAsC,CAAtC;;AAEA,eAAKI,iBAAL,GAAyB,KAAK3B,eAAL,EAAzB;AACA,eAAK4B,UAAL,GAAkB,MAAM,KAAKD,iBAA7B;AACD;;AAEDnE,eAAOH,GAAP,EAAY;;AAEV,cAAI,KAAKuE,UAAL,IAAmBvE,IAAIwE,OAA3B,EAAoC;AAClCxD,mBAAO+B,iBAAP,CAAyB,KAAKwB,UAA9B,EAA0C3E,GAAGI,IAAIwE,OAAP,EAAgBxE,IAAIyE,OAApB,EAA6BC,KAA7B,CAAmC,KAAKhB,UAAxC,CAA1C;AACD;AACF;;AAED,cAAMtD,SAAN,CAAgBJ,GAAhB,EAAqB;AACnB;AACA,cAAI,KAAKsE,iBAAT,EAA4B;AAC1B,gBAAIK,SAAS,MAAM,KAAKL,iBAAxB;AACAvC,qBAASC,IAAT,CAAcY,WAAd,CAA0B+B,MAA1B;AACA3D,mBAAO+B,iBAAP,CAAyB4B,MAAzB,EAAiC/E,GAAGI,IAAIwE,OAAP,EAAgBxE,IAAIyE,OAApB,EAA6BC,KAA7B,CAAmC,KAAKhB,UAAxC,CAAjC;AACD;AACF;;AAED,cAAMrD,OAAN,CAAcL,GAAd,EAAmB;AACjB,cAAI4E,MAAMC,OAAN,IAAiB,EAArB,EAAyB;AAAE;AACzB,gBAAInC,OAAQ,MAAM,KAAKC,eAAL,EAAlB;AACA,gBAAIE,SAAS,KAAKJ,YAAL,CAAkBK,qBAAlB,EAAb;AACAf,qBAASC,IAAT,CAAcY,WAAd,CAA0BF,IAA1B;AACA1B,mBAAO+B,iBAAP,CAAyBL,IAAzB,EAA+B9C,GAAGiD,OAAOiC,IAAV,EAAgBjC,OAAOkC,GAAvB,CAA/B;AACA,iBAAKtC,YAAL,CAAkBuC,KAAlB;AACAtC,iBAAKuC,KAAL;AACD;AACF;;AAED,cAAMpD,eAAN,CAAsB7B,GAAtB,EAA2B;AACzB,cAAIoB,MAAM,MAAMJ,OAAOC,UAAP,CAAkBC,sBAAlB,CAAyC,KAAKR,MAAL,CAAYI,QAArD,CAAhB;AACA,cAAI,CAACM,GAAL,EAAU;AACRJ,mBAAOkE,MAAP,CAAc,qBAAd;AACD;AACD,cAAIC,SAAS,MAAMnE,OAAOoE,MAAP,CAAc,iBAAd,EAAiChE,GAAjC,CAAnB;AACA,cAAI+D,UAAUA,WAAW/D,GAAzB,EAA8B;AAC5BJ,mBAAOkE,MAAP,CAAc,aAAaC,MAA3B;;AAEA,kBAAMnE,OAAOqE,KAAP,CAAaC,QAAb,CAAsBlE,GAAtB,EAA2B+D,MAA3B,CAAN;;AAEA,gBAAII,QAAQnE,IAAIL,OAAJ,CAAY,OAAZ,EAAqB,IAArB,CAAZ;AACA,gBAAIyE,WAAWL,OAAOpE,OAAP,CAAe,OAAf,EAAwB,IAAxB,CAAf;AACA,gBAAG,MAAMC,OAAOqE,KAAP,CAAaI,SAAb,CAAuBF,KAAvB,CAAT,EAAwC;AACtC,oBAAMvE,OAAOqE,KAAP,CAAaC,QAAb,CAAsBC,KAAtB,EAA6BC,QAA7B,CAAN;AACD;;AAED,gBAAIE,SAAStE,IAAIL,OAAJ,CAAY,OAAZ,EAAqB,KAArB,CAAb;AACA,gBAAI4E,YAAYR,OAAOpE,OAAP,CAAe,OAAf,EAAwB,KAAxB,CAAhB;AACA,gBAAG,MAAMC,OAAOqE,KAAP,CAAaI,SAAb,CAAuBC,MAAvB,CAAT,EAAyC;AACvC,oBAAM1E,OAAOqE,KAAP,CAAaC,QAAb,CAAsBI,MAAtB,EAA8BC,SAA9B,CAAN;AACD;AACF;AACF;;AAGDzC,wBAAgB;AACd,eAAK0C,KAAL,CAAWC,KAAX,GAAmB,OAAnB;AACA,eAAKD,KAAL,CAAWE,MAAX,GAAoB,OAApB;AACA,eAAKrF,SAAL,CAAe;AACbG,kBAAM,MADO;AAEbE,sBAAU,kBAFG;AAGb,wBAAY;AAHC,WAAf;AAKD;;AAEDiF,sBAAcC,KAAd,EAAqB;AACnB,eAAKvF,SAAL,CAAeuF,MAAMtF,MAArB;AACD;;AA5KiD;;yBAA/Bb,gB","file":"lively-component-bin-tile.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport componentLoader from 'src/client/morphic/component-loader.js';\nimport preferences from 'src/client/preferences.js';\nimport ContextMenu from 'src/client/contextmenu.js';\nimport {pt} from 'src/client/graphics.js';\n\nexport default class ComponentBinTile extends Morph {\n\n  initialize() {\n    this.addEventListener('dblclick', evt => this.onDblClick(evt))\n    this.addEventListener('dragstart', evt => this.onDragStart(evt))\n    this.addEventListener('drag', evt => this.onDrag(evt))\n    this.addEventListener('dragend', evt => this.onDragEnd(evt))\n    this.addEventListener('keyup', evt => this.onKeyUp(evt))\n    this.draggable = true;\n    this.setAttribute(\"tabindex\", 0)\n    this.addEventListener('contextmenu',  evt => this.onContextMenu(evt), false);\n  }\n\n  configure(config) {\n    this.config = config; \n    this.setComponentName(config.name);\n    var thumbnailName = config.template.replace(/html$/,\"png\")\n\n    lively.components.searchTemplateFilename(thumbnailName).then( url => {\n      if (url) {\n        this.setThumbnail(url)\n      }\n    })\n    \n    this.setTooltip(config.description);\n    this.htmlTag = config[\"html-tag\"];\n  }\n  \n  onContextMenu(evt) {      \n    if (!evt.shiftKey) {\n      evt.stopPropagation();\n      evt.preventDefault();\n\n      var menu = new ContextMenu(this, [\n          [\"move\", () => this.onMoveComponent(evt) ],\n      ]);\n      menu.openIn(document.body, evt, this);\n      return true;\n    }\n  }\n\n  setThumbnail(path) {\n    this.get('img').src = path;\n  }\n\n  getThumbnailPath() {\n    return this.get('img').src\n  }\n\n  setTooltip(string) {\n    this.get('img').title = string;\n  }\n\n  setComponentName(name) {\n    this.get('p').innerHTML = name;\n  }\n\n  setBin(componentBin) {\n    this.componentBin = componentBin;\n  }\n  \n  async onDblClick(evt) {\n    var comp  = await this.createComponent(evt);\n    document.body.appendChild(comp)\n    var bounds = this.componentBin.getBoundingClientRect()\n    lively.setGlobalPosition(comp, lively.getPosition(evt))\n  } \n  \n  setupComponent(comp) {\n    if (comp.livelyExample) comp.livelyExample()\n  }\n\n  \n  async createComponent(evt) {\n    var worldContext = document.body\n    var comp = await lively.create(this.htmlTag, worldContext);\n    this.component = comp;\n    var pos = lively.getGlobalPosition(this)\n  \n    if ((this.componentBin && this.componentBin.inWindow()) || comp.wantsOpenInWindow) {\n      this.dragOffset = pt(-300,-10)\n      return componentLoader.openInWindow(comp).then(win => {\n        lively.setGlobalPosition(comp.parentElement, pos)\n        \n        this.setupComponent(comp)\n        comp.parentElement.remove()\n\n        return comp.parentElement\n      })\n    } else {\n      this.dragOffset = pt(0,0)\n      this.setupComponent(comp)\n      lively.setGlobalPosition(comp, pos.subPt(lively.getExtent(comp).scaleBy(0.5)))\n      return comp\n      \n    }\n  }\n  \n  async onDragStart(evt) {\n    var img = document.createElement(\"img\")\n    img.src = this.getThumbnailPath()    \n    evt.dataTransfer.setDragImage(img, 0, 0); \n\n    this.dragTargetPromise = this.createComponent()\n    this.dragTarget = await this.dragTargetPromise\n  }\n  \n  onDrag(evt) {\n    \n    if (this.dragTarget && evt.clientX) {\n      lively.setGlobalPosition(this.dragTarget, pt(evt.clientX, evt.clientY).addPt(this.dragOffset))\n    } \n  }\n  \n  async onDragEnd(evt) {\n    // Do nothing... \n    if (this.dragTargetPromise) {\n      var target = await this.dragTargetPromise\n      document.body.appendChild(target) \n      lively.setGlobalPosition(target, pt(evt.clientX, evt.clientY).addPt(this.dragOffset))\n    }\n  }\n\n  async onKeyUp(evt) {\n    if (event.keyCode == 13) { // ENTER\n      var comp  = await this.createComponent();\n      var bounds = this.componentBin.getBoundingClientRect()\n      document.body.appendChild(comp)\n      lively.setGlobalPosition(comp, pt(bounds.left, bounds.top))\n      this.componentBin.close()\n      comp.focus()\n    }\n  } \n\n  async onMoveComponent(evt) {\n    var url = await lively.components.searchTemplateFilename(this.config.template);\n    if (!url) {\n      lively.notify(\"could  not find url\")\n    }\n    var newUrl = await lively.prompt(\"Move component?\", url);\n    if (newUrl && newUrl !== url) {\n      lively.notify(\"Move to \" + newUrl);\n      \n      await lively.files.moveFile(url, newUrl)\n      \n      var jsUrl = url.replace(/html$/, \"js\")\n      var newJsUrl = newUrl.replace(/html$/, \"js\")\n      if(await lively.files.existFile(jsUrl)) {\n        await lively.files.moveFile(jsUrl, newJsUrl)\n      }\n      \n      var pngUrl = url.replace(/html$/, \"png\")\n      var newPngUrl = newUrl.replace(/html$/, \"png\")\n      if(await lively.files.existFile(pngUrl)) {\n        await lively.files.moveFile(pngUrl, newPngUrl)\n      }\n    }\n  }\n  \n  \n  livelyExample() {\n    this.style.width = \"150px\"\n    this.style.height = \"150px\"\n    this.configure({\n      name: \"ball\",\n      template: \"lively-ball.html\",\n      \"html-tag\": \"lively-ball\"\n    }) \n  }\n  \n  livelyMigrate(other) {\n    this.configure(other.config)\n  }\n  \n  \n}\n"]}