{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-particles/src/client/vivide/scripts/loading.js"],"names":["Script","scriptFolder","stepFolder","applicationFolder","getMatches","calcScore","getDetails","replace","openFile","setScript","createView","autoGenerated","folders","allFiles","Promise","all","map","folderURL","lively","files","statFile","then","j","JSON","parse","contents","filter","type","name","test","content","createEditor","createDependents","componentWindow","openComponentInWindow","input","inputs","script","fromJSON","myCurrentScript","widget","create","setView","scriptGotUpdated","scriptEditor","createScriptEditor","applicationName","inputSources","i","forEach","connectTo","outputs","o","length","newDataFromUpstream","url","view","config","fetch","f","json","file","filepath","split","loadFile","obj","key","rep","undefined","r","scheme","description","toFit","score","Object","keys","search","details","d","includes","sort","a","b","_"],"mappings":"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","file":"loading.js","sourcesContent":["import Script from 'src/client/vivide/vividescript.js';\nimport { scriptFolder, stepFolder, applicationFolder } from 'src/client/vivide/utils.js';\n\nlet autoGenerated = /(.*-template\\.js(on)?$)|(.md?$)/;\nconst folders = [scriptFolder, stepFolder, applicationFolder];\n\nexport let allFiles = () => Promise.all(folders.map(folderURL => \n     lively.files.statFile(folderURL).then(j => \n      JSON.parse(j).contents\n       .filter(({ type }) => type === 'file')\n       .filter(({name}) => !autoGenerated.test(name))\n       .map(({name}) => folderURL+name))\n));\n\nexport async function createView(content, createEditor = false, createDependents = false, name){\n  const componentWindow = await lively.openComponentInWindow('vivide-view');\n  if (!createDependents) componentWindow.input = JSON.parse(content.inputs);\n  const script = await Script.fromJSON(content.script,componentWindow);\n  componentWindow.myCurrentScript = script;\n  const widget = await lively.create(content.widget);\n  widget.setView(componentWindow);\n  await componentWindow.scriptGotUpdated();\n  if(createEditor){\n    const scriptEditor = await componentWindow.createScriptEditor();\n    scriptEditor.setView(componentWindow);\n    await scriptEditor.setScript(script);\n  }\n  if(createDependents){\n    componentWindow.applicationName = name;\n    const inputs = await Promise.all(content.inputSources.map(i => createView(i, false, true, name)));\n    inputs.forEach(i => i.connectTo(componentWindow));\n    const outputs = await Promise.all(content.outputs.map(o => createView(o, false, true, name)));\n    outputs.forEach(o => componentWindow.connectTo(o));\n    if(content.inputs && content.inputs && content.inputs.length !== 0){\n      componentWindow.newDataFromUpstream(content.inputs);\n    }\n  }\n  return componentWindow;\n}\n\nexport async function setScript(url, view){\n  const config = await fetch(url).then(f => f.json());\n  const widget = await lively.create(config.widget);\n  widget.setView(view)\n  const script = await Script.fromJSON(config.script, view);\n  view.myCurrentScript = script;\n  const scriptEditor = await view.createScriptEditor();\n  scriptEditor.setView(view);\n  await scriptEditor.setScript(script);\n  await view.scriptGotUpdated();\n}\n\nexport async function openFile(file, createEditor, createDependents){\n  const filepath = file.split('/');\n  const content = JSON.parse(await lively.files.loadFile(file));\n  const name = filepath[filepath.length-1].split('.')[0];\n  await createView(content, createEditor, createDependents, name);\n}\n\nfunction replace(obj, key, rep = true){\n   return typeof obj[key] === \"undefined\" ? rep ? `No ${key} provided` : undefined : obj[key]\n}\n\nexport function getDetails(file, rep = false) {\n  return fetch(file)\n    .then(r => r.json())\n    .then(j => ({\n      scheme: replace(j, \"inScheme\", true),\n      description: replace(j, \"description\", rep)\n    }))\n}\n\nfunction calcScore(scheme, toFit){\n  if(!(scheme && toFit)) return 0;\n  if(scheme === toFit) return 100;\n  let score = 0;\n  Object.keys(toFit).forEach(key => {\n    if(scheme[key]){\n      score++;\n      if(toFit[key]===scheme[key]){\n        score++;\n      }\n    }\n  });\n  return score/Object.keys(toFit).length\n}\n\nexport async function getMatches(scheme, search){\n  const all = await allFiles();\n  const details  = await Promise.all(all[0].map(f => getDetails(f).then(d => ({name: f, details: d}))));\n  return details\n          .filter(f => search ? f.name.includes(search) : true)\n          .sort((a, b) => calcScore(\n              JSON.parse(scheme),\n              b.details.scheme\n            )-calcScore(\n              JSON.parse(scheme),\n              a.details.scheme\n          ))\n          .filter((_, i) => i<3)\n          .map(f => ({\n            name: f.name.split('/')[f.name.split('/').length-1].split('.')[0],\n            url: f.name\n          }))\n    \n}"]}