{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-augment/src/client/essay.js"],"names":["boundEval","_","letsScript","pt","toggleLayer","name","checkbox","layer","window","beGlobal","checked","isGlobal","update","beNotGlobal","addEventListener","showVariable","self","div","lastValue","updateVariable","result","isError","value","forEach","textContent","key","replace","slice","lively","findWorldContext","clearInterval","intervalId","setInterval","runExampleButton","exampleName","ctx","dependencies","button","appendResult","code","element","classList","add","parentElement","insertBefore","nextSibling","onclick","codeBlocks","ea","push","sortBy","querySelectorAll","getGlobalPosition","y","remove","i","indexElement","resultElement","querySelector","style","border","showError","error","contains","then","e","HTMLElement","appendChild","position","sleep","setExtent","getExtent","margin","undefined","Object","inspector","inspect","hideWorkspace","runVivideButton","vivideScript","vivideBlock","inspectVariable","hideHiddenElements","tagName","display","presentationPrintButton","document","createElement","presentation","query","print","presentationFullscreenButton","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\n\nexport function runExampleButton(exampleName, ctx, 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    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    \n    var i=1\n    for(var code of codeBlocks) {\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 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        code.parentElement.style.border = \"1px dashed darkgreen\";\n        if (code.classList.contains(\"NoResult\")) continue;\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          var 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    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"]}