{"version":3,"sources":["https://lively-kernel.org/lively4/swd21-particles/src/client/essay.js"],"names":["boundEval","_","letsScript","pt","presentationFullscreenButton","presentationPrintButton","hideHiddenElements","inspectVariable","runVivideButton","runExampleButton","executeCode","appendResult","showVariable","toggleLayer","name","checkbox","layer","window","beGlobal","checked","isGlobal","update","beNotGlobal","addEventListener","self","div","lastValue","updateVariable","result","isError","value","forEach","textContent","key","replace","slice","lively","findWorldContext","clearInterval","intervalId","setInterval","code","element","classList","add","style","parentElement","insertBefore","nextSibling","i","ctx","indexElement","resultElement","querySelector","remove","source","contains","border","showError","error","then","e","HTMLElement","appendChild","position","sleep","setExtent","getExtent","margin","undefined","Object","inspector","inspect","hideWorkspace","exampleName","dependencies","button","onclick","codeBlocks","dep","depCodeBlocks","querySelectorAll","sortBy","ea","getGlobalPosition","y","push","vivideScript","vivideBlock","tagName","display","document","createElement","presentation","query","print","container","console","log","slide","notify","reutrn","toggleFullscreen"],"mappings":"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","file":"essay.js","sourcesContent":["import boundEval from \"src/client/bound-eval.js\";\nimport _ from 'src/external/lodash/lodash.js'\nimport { letsScript } from 'src/client/vivide/vivide.js';\nimport {pt}  from 'src/client/graphics.js'\n\nexport function toggleLayer(name) {\n  var checkbox=<input  type=\"checkbox\"></input>\n  var layer = window[name]\n  if (layer && layer.beGlobal) {\n    checkbox.checked = layer.isGlobal()       \n  }\n  \n  function update() {\n    var layer = window[name]\n    if (layer && layer.beGlobal) {\n      if (checkbox.checked == true) {\n        layer.beGlobal()\n      } else {\n        layer.beNotGlobal()\n      }\n    } else {\n      // checkbox.style.backgroundColor = \"red\"\n    }\n  }\n\n  checkbox.addEventListener(\"click\", update);\n  return <span>{checkbox} {name}</span>\n}\n\nexport function showVariable(name, self) {\n  var div=<div class=\"variable\" \n    style=\"display: inline-block; max-height: 100px; overflow: auto; background-color: gray; color: white; padding: 4px; font-style: italic; white-space: pre-wrap\"></div>\n  \n  \n  // #TODO garbage collect them...\n  // window.setInterval(async () => {\n  //   var result  = await boundEval(name);    \n  //   if (!result.isError) {\n  //     div.textContent = name + \" = \" + result.value\n  //   }\n  // }, 500);\n  // #TODO garbage collect them...\n  var lastValue\n  async function updateVariable () {\n    var result  = await boundEval(name, self);    \n    if (!result.isError && (lastValue !== result.value)) {\n      if (result.value.forEach) {\n        div.textContent = name + \"\\n\"\n        result.value.forEach((value, key) => {\n          div.textContent += key.replace(/\\n/g,\"\").slice(0,70) + \":\" + value +\"\\n\"\n        })\n      } else {\n        div.textContent = name + \" = \" + result.value\n      }\n      \n    }\n    \n    lastValue = result.value\n    if (!lively.findWorldContext(div)) { // we are still open\n      clearInterval(intervalId);\n    }\n    // #TODO start me again... if I should become open again?\n  }\n  \n  var intervalId = setInterval(updateVariable, 1000);\n  \n  return div\n}\n\nexport function appendResult(code, element) {\n  element.classList.add(\"result\")\n  element.style[\"white-space\"] = \"normal\"\n  code.parentElement.insertBefore(element, code.nextSibling)\n}\n\nexport async function executeCode(code, i, ctx) {\n  var indexElement = <div class=\"indexElement\" style=\"color: blue;\">{i}</div>\n      code.parentElement.insertBefore(indexElement, code)\n\n      // show only the latest result\n      var resultElement = code.parentElement.querySelector(\".result\")\n      if (resultElement) resultElement.remove()\n      var source = code.textContent\n      if (code.classList.contains(\"async\")) {\n        source = `(async () => {` + source +`})()`  \n      }\n      var result = await boundEval(source, ctx);    \n      if (result.isError) {\n        code.parentElement.style.border = \"1px solid red\";\n        lively.showError(result.value)\n        var error = <div class=\"result error\" style=\"color: red\">Error: {result.value}</div>\n        code.parentElement.insertBefore(error, code.nextSibling)\n        return\n      } else {\n        code.parentElement.style.border = \"1px dashed darkgreen\";\n        if (code.classList.contains(\"NoResult\")) return;\n        var element;\n        var value = result.value\n        if (value && value.then) {\n          try {\n            value = await value;\n          } catch(e) {\n            let error = <div class=\"error\" style=\"color: red\">Error in Promise: {e}</div>\n            appendResult(code, error)\n          return    \n          }\n        }\n        if (value instanceof HTMLElement) {\n          element = <div style=\"color: blue; font-style='italic'\"></div>\n          element.appendChild(value)\n          element.style.position = \"relative\"\n          lively.sleep(100).then(()=> {\n            lively.setExtent(element, lively.getExtent(value)) // #LayoutHack\n            element.style.margin = \"20px\"\n          })\n          appendResult(code, element)\n        } else if (value && value.beGlobal) {\n          element = toggleLayer(value.name)\n          appendResult(code, element)\n\n        } else if (value !== undefined && value instanceof Object) {\n          var inspector = await (<lively-inspector style=\"position:absolute; top:0px; left:0px; width: 100%; height: 100%\"></lively-inspector>)\n          inspector.inspect(value)\n          inspector.hideWorkspace()\n          element  = <div style=\"display: inline-block; position:relative; top:0px; left:0px; height: 100px; width: 500px;background: white; white-space: wrap\">{inspector}</div>\n          \n          appendResult(code, element)\n        } else if (value !== undefined) { \n          element = <div style=\"color: blue; font-style='italic'\"> => {value}</div>\n          appendResult(code, element)\n        }\n      }\n}\n\n\nexport function runExampleButton(exampleName, ctx, dependencies=[]) {\n  var button=<button>{exampleName}</button>\n  \n  button.onclick = (async () => {\n    // gather all dependent code blocks\n    var codeBlocks = []\n    dependencies.forEach(dep => {\n      var depCodeBlocks = ctx.parentElement.querySelectorAll(\".\" + dep)\n      depCodeBlocks = _.sortBy(depCodeBlocks, ea => lively.getGlobalPosition(ea).y)\n      codeBlocks.push(...depCodeBlocks)\n    })\n    codeBlocks.push(..._.sortBy(ctx.parentElement.querySelectorAll(\".\" + exampleName), \n                      ea => lively.getGlobalPosition(ea).y))\n    \n  \n    // codeBlocks = _.sortBy(codeBlocks, ea => lively.getGlobalPosition(ea).y)\n    // go through all code blocks and (re-)execute them and show result (and errors)\n    \n    ctx.parentElement.querySelectorAll(\".indexElement\").forEach(ea => {\n      ea.remove()\n    });\n      \n    var i=1\n    for(var code of codeBlocks) {\n      await executeCode(code, i++, ctx)\n    }\n    return  \"\"\n  });\n  return button\n}\n\n\n\n\nexport function runVivideButton(exampleName, ctx, vivideScript, dependencies=[]) {\n  var button=<button>{exampleName}</button>\n  var appendResult = function(code, element) {\n    element.classList.add(\"result\")\n    code.parentElement.insertBefore(element, code.nextSibling)\n  }\n  \n  button.onclick = (async () => {\n    // gather all dependent code blocks\n    var codeBlocks = []\n    dependencies.forEach(ea => {\n      codeBlocks.push(..._.sortBy(ctx.parentElement.querySelectorAll(\".\" + ea), \n                      ea => lively.getGlobalPosition(ea).y))\n    })\n    var vivideBlock = ctx.parentElement.querySelector(\".\" + vivideScript)\n    codeBlocks.push(vivideBlock)\n    \n  \n    // codeBlocks = _.sortBy(codeBlocks, ea => lively.getGlobalPosition(ea).y)\n    // go through all code blocks and (re-)execute them and show result (and errors)\n    \n    ctx.parentElement.querySelectorAll(\".indexElement\").forEach(ea => {\n      ea.remove()\n    });\n      \n    \n    var i=1\n    for(var code of codeBlocks) {\n      var result  = await boundEval(code.textContent, ctx);    \n      if (result.isError) {\n        code.parentElement.style.border = \"1px solid red\";\n        lively.showError(result.value)\n        var error = <div class=\"result error\" style=\"color: red\">Error: {result.value}</div>\n        code.parentElement.insertBefore(error, code.nextSibling)\n        return\n      } else {\n        var value = result.value\n        if (value && value.then) {\n          try {\n            value = await value;\n          } catch(e) {\n            let error = <div class=\"error\" style=\"color: red\">Error in Promise: {e}</div>\n            appendResult(code, error)\n          return    \n          }\n        }\n        if (code === vivideBlock) {\n          letsScript(value)\n        }\n      }\n    }\n    return  \"\"\n  });\n  return button\n}\n\nexport async function inspectVariable(name) {\n  var inspector = await (<lively-inspector></lively-inspector>)\n  var result  = await boundEval(name);    \n  inspector.inspect(result.value)\n  inspector.hideWorkspace()\n  // window.setInterval(async () => {\n  //   var result  = await boundEval(name);    \n  //   inspector.inspect(result.value)\n  // }, 1000);\n  return inspector\n}\n\nexport async function hideHiddenElements(ctx) {\n  ctx.parentElement.querySelectorAll(\".Hidden\").forEach( ea => {\n    if (ea.tagName == \"CODE\") {\n     ea.parentElement.style.display = \"none\"\n    }\n  })\n}\n\nexport function presentationPrintButton(ctx) {\n  var button = document.createElement(\"button\")\n  button.textContent = \"print\"\n  button.onclick = async () => {\n   var presentation = lively.query(ctx, \"lively-presentation\")\n   presentation.print()\n  }\n  button.style = \"position: absolute; bottom: 10px; left: 10px\"\n  return button\n}\n\n\nexport function presentationFullscreenButton(ctx) {\n  var button = document.createElement(\"button\")\n  button.textContent = \" fullscreen \"\n  var container = lively.query(ctx, \"lively-container\")\n  if (!container) {\n    console.log(\"presentationFullscreenButton>>not in a container\")\n    return \n  }\n\n  var presentation = lively.query(ctx, \"lively-presentation\")\n  if (!presentation) {\n    console.log(\"presentationFullscreenButton>>not in a presentation\")\n    return \n  }\n  var slide = lively.query(ctx, \".lively-slide\")\n  if (!slide) {\n    lively.notify(\"could not find slide\")\n    return\n  }\n  if (!presentation) {\n    console.log(\"presentationFullscreenButton>>not in a slide\")\n    reutrn \n  }\n  \n  button.onclick = async () => {\n    presentation.toggleFullscreen()\n  }\n  button.style = \"position: absolute; bottom: 10px; left: 80px\"\n  return button\n}\n\n"]}