{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-petrinet/src/components/tools/lively-component-bin.js"],"names":["Morph","files","componentLoader","ComponentBin","initialize","windowTitle","categories","Set","compList","loadComponentList","createTiles","showTiles","sortAlphabetically","componentList","updateCategories","searchField","get","addEventListener","e","searchFieldChanged","target","select","focus","onSelectCategory","category","showCategory","ul","querySelectorAll","forEach","ea","classList","remove","li","querySelector","add","tile","shadowRoot","config","style","display","innerHTML","Array","from","sort","setAttribute","evt","appendChild","paths","lively","components","getTemplatePaths","filter","match","result","templatesUrl","statFile","then","response","push","JSON","parse","contents","file","type","name","map","directory","replace","compInfo","create","setBin","configure","filteredCompList","list","getSubmorph","firstChild","removeChild","inWindow","checked","subList","findByName","value","a","b","toLowerCase","string","comp","indexOf","close","parentElement","isWindow"],"mappings":"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","file":"lively-component-bin.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport files from 'src/client/files.js';\nimport * as componentLoader from 'src/client/morphic/component-loader.js';\n\nexport default class ComponentBin extends Morph {\n  async initialize() {\n    this.windowTitle = \"Component Bin\"\n    this.categories = new Set()\n    \n    var compList = await this.loadComponentList()\n    await this.createTiles(compList);\n    this.showTiles(this.sortAlphabetically(this.componentList));\n    \n    this.updateCategories()\n    \n    this.searchField = this.get(\"#search-field\");\n    this.searchField.addEventListener('keyup', (e) => { this.searchFieldChanged(e) });\n    this.searchField.addEventListener('focus', (e) => { e.target.select(); });\n    \n    this.searchField.focus()\n    // this.showCategory(\"tools\")  \n  }\n\n  onSelectCategory(category) {\n    this.showCategory(category)  \n  }\n\n  showCategory(category) {\n    var ul = this.get(\"#categories\")\n    ul.querySelectorAll(\"li\").forEach(ea => ea.classList.remove(\"selected\"))\n    \n    var li = ul.querySelector(`li[name=\"${category}\"]`)\n    if (li) {\n      li.classList.add(\"selected\")\n    }\n    \n    \n    for(let tile of this.shadowRoot.querySelectorAll(\"lively-component-bin-tile\")) {\n      if (tile.config.category == category) {\n        tile.style.display = \"\"\n      } else {\n        tile.style.display = \"none\"\n      }\n    }\n  }\n\n  updateCategories() {\n    var ul = this.get(\"#categories\")\n    ul.innerHTML = \"\"\n    for(let category of Array.from(this.categories).sort()) {\n      let li = <li>{category}</li>\n      li.setAttribute(\"name\", category)\n      li.addEventListener(\"click\", evt => {\n        this.onSelectCategory(category)\n      })\n      ul.appendChild(li)\n    }\n    \n  }\n  \n  \n  async loadComponentList() {\n    var paths =  lively.components.getTemplatePaths()\n      .filter(ea => !ea.match(/\\/draft/))\n      .filter(ea => !ea.match(/\\/halo/))\n      // .filter(ea => !ea.match(/\\/widgets/))\n\n    var result  = []\n    for(let templatesUrl of paths) {\n      await files.statFile(templatesUrl).then(response => {\n        try {\n          // depending in the content type, the response is either parsed or not,\n          // github always returns text/plain\n          result.push(...JSON.parse(response).contents.filter(file => {\n              return file && file.type === \"file\" && file.name.match(/\\.html$/);\n            }).map(file => {\n              var directory = templatesUrl.replace(/\\/$/,\"\")\n                      return {\n              \"name\": file.name.replace(/\\.html$/,\"\")\n                .replace(/lively-/,\"\").replace(/-/g,\" \"),\n              \"html-tag\": file.name.replace(/\\.html$/,\"\"),\n              \"description\": \"\",\n              \"author\": \"\",\n              \"date-changed\": \"\",\n              \"categories\": [\"default\"],\n              \"category\": directory.replace(/.*\\//,\"\"),\n              \"tags\": [],\n              \"directory\": directory,\n              \"template\": file.name}\n            }))\n        } catch (e) {\n          // it was already json\n        }\n      })\n    }\n    \n    return result\n  }\n\n  async createTiles(compList) {\n    this.componentList = []\n    for(let compInfo of compList) {\n      this.categories.add(compInfo[\"category\"])\n      var tile = await lively.create(\"lively-component-bin-tile\", this);\n      tile.setBin(this);\n      tile.configure(compInfo);\n      compInfo.tile = tile;\n      this.componentList.push(compInfo)\n    }\n  }\n\n  showTiles(filteredCompList) {\n    var list = this.getSubmorph(\".tile-pane\");\n\n    // remove all tiles\n    while (list.firstChild) {\n      list.removeChild(list.firstChild);\n    }\n\n    filteredCompList.forEach((compInfo) => {\n      list.appendChild(compInfo.tile);\n    });\n  }\n\n  inWindow() {\n    return this.getSubmorph(\"#open-in-checkbox\").checked;\n  }\n\n  searchFieldChanged(evt) {\n    var subList = this.findByName(this.searchField.value);\n    subList = this.sortAlphabetically(subList);\n\n    this.showTiles(subList);\n  }\n\n  sortAlphabetically(compList) {\n    return compList.sort((a, b) => {\n      a = a.name.toLowerCase();\n      b = b.name.toLowerCase();\n      if (a < b) return -1;\n      if (a > b) return 1;\n      return 0;\n    });\n  }\n\n  findByName(string) {\n    if (!this.componentList) return []\n    return this.componentList.filter((comp) => {\n      return comp.name.toLowerCase().indexOf(string.toLowerCase()) >= 0;\n    });\n  }\n  \n  close() {\n    if (this.parentElement && this.parentElement.isWindow) {\n      this.parentElement.remove()\n    }\n  }\n  \n}\n"]}