{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/components/demo/lively-continuous-editor.js"],"names":["Morph","babelDefault","SyntaxChecker","traceBabelPlugin","boundEval","debounce","ShowPerformance","babel","ContinuousEditor","initialize","windowTitle","get","setURL","loadFile","sourceCodeChangedDelay","checkForSyntaxErrorsCodeMirror","editor","runCode","registerButtons","hideWorkspace","addEventListener","evt","selectCallTraceNode","detail","object","editorComp","doSave","saveFile","onSourceChange","dispatchEvent","CustomEvent","hideMarker","markId","marker","shadowRoot","querySelector","style","backgroundColor","traceNode","classList","remove","showMarker","lastMarkId","add","node","selectedNode","ast","innerHTML","src","getValue","result","transform","babelrc","plugins","presets","filename","undefined","sourceFileName","moduleIds","sourceMaps","compact","comments","code","resolveModuleSource","err","ctx","getContext","fillStyle","fillRect","value","textContent","window","__tr_last_ast__","clearMarkers","traceRoot","calltrace","inspect","markCallTree","updateTraceView","updateMarkerResults","tree","printTraceNode","astNode","id","node_map","nodeToString","call","astnode","ast_node","label","type","argument","name","callee","property","left","maxCallId","parent","document","createElement","setAttribute","stopPropagation","appendChild","children","forEach","ea","lastMarkCounter","getAllMarks","filter","isTraceMark","clear","start","end","markText","line","loc","ch","column","className","css","title","clearGutter","parentBounds","getBoundingClientRect","updateMarkerResultsEach","addMarkerResult","text","info","lineInfo","gutterMarkers","markerLine","rightgutter","fontSize","whiteSpace","setGutterMarker","resultNode","markerLayer","findBroadCallNode","findBroadCallNodes","Map","nodes","visited","length","shift","child","push","livelyMigrate","other","getURL","setValue","setTimeout","measure"],"mappings":"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","file":"lively-continuous-editor.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport babelDefault from 'systemjs-babel-build';\nconst babel = babelDefault.babel;\nimport SyntaxChecker from 'src/client/syntax.js'\nimport traceBabelPlugin from \"./lively-continuous-editor-plugin.js\"\nimport boundEval from 'src/client/bound-eval.js';\nimport { debounce } from \"utils\";\n\nimport ShowPerformance from \"demos/contextjs/showperformancelayer.js\";\n\n// import localsBabelPlugin from 'babel-plugin-locals'\n\n//import lively from './../src/client/lively.js';\n\nexport default class ContinuousEditor extends Morph {\n\n  initialize() {\n    this.windowTitle = \"Continuous Feedback Editor\";  \n    this.get(\"#source\").setURL(\"https://lively-kernel.org/lively4/lively4-jens/demos/hello.js\")\n    this.get(\"#source\").loadFile()\n\n    this.sourceCodeChangedDelay = (() => {\n      SyntaxChecker.checkForSyntaxErrorsCodeMirror(this.editor());\n      this.runCode();\n    })::debounce(500);\n\n    this.registerButtons();\n\n    this.get(\"#traceInspector\").hideWorkspace()\n    // this.get(\"#objectInspector\").hideWorkspace()\n\n    this.get(\"#traceInspector\").addEventListener(\"select-object\", \n      evt => this.selectCallTraceNode(evt.detail.object))\n\n    this.editorComp().doSave = () => {\n      this.get(\"#source\").saveFile();\n      this.runCode();      \n    };\n    \n    this.editorComp().addEventListener(\"change\", evt => \n      this.onSourceChange(evt));\n\n\n    this.editorComp().addEventListener(\"editor-loaded\", evt => \n      this.dispatchEvent(new CustomEvent(\"initialize\")));\n\n  }\n  \n  hideMarker(markId) {\n    var marker = this.editorComp().shadowRoot.querySelector(\".\" + markId)\n    if (marker) marker.style.backgroundColor = ''\n    \n    var traceNode = this.get(\"#traceView\").querySelector(\"#\" + markId)\n    if (traceNode ) {\n       traceNode.classList.remove(\"selected\")\n    }\n  }\n  \n  showMarker(markId) {\n    if (this.lastMarkId) {\n      this.hideMarker(this.lastMarkId)\n    }\n    this.lastMarkId = markId\n    var marker = this.editorComp().shadowRoot.querySelector(\".\" + markId)\n    if (marker) marker.style.backgroundColor = 'rgba(0,0,255,0.5)'\n\n    var traceNode = this.get(\"#traceView\").querySelector(\"#\" + markId)\n    if (traceNode ) {\n      traceNode.classList.add(\"selected\")\n    }\n  }\n  \n  selectCallTraceNode(node) {\n    this.selectedNode = node\n    if (node.markId) {\n      this.showMarker(node.markId)\n    }\n  }\n\n  editorComp() {\n    return this.get(\"#source\").get(\"lively-code-mirror\");\n  }\n  \n  editor() {\n    return this.editorComp().editor\n  }\n  \n  onSourceChange(evt) {\n    this.sourceCodeChangedDelay();\n  }\n\n  \n  async runCode() {\n    this.ast = null; // clear\n    this.get(\"#log\").innerHTML = \"\"\n    var src = this.editor().getValue();\n  \n    // this.get(\"#astInspector\").inspect(this.ast)\n    try {\n      var src = this.editor().getValue();\n      this.result = babel.transform(src, {\n        babelrc: false,\n        plugins: [traceBabelPlugin],\n        presets: [],\n        filename: undefined,\n        sourceFileName: undefined,\n        moduleIds: false,\n        sourceMaps: false,\n        compact: false,\n        comments: true,\n        code: true,\n        ast: true,\n        resolveModuleSource: undefined\n      })\n    } catch(err) {\n      this.get(\"#log\").innerHTML = \"\" + err\n    }\n    \n    try {\n      // lively.notify(\"output: \" + this.result.code)\n      var ctx = this.get(\"#canvas\").getContext(\"2d\")\n      ctx.fillStyle = \"white\"\n      ctx.fillRect(0, 0, 300, 300);\n      \n      var result =  (await boundEval(\"\"+this.result.code, this.get(\"#canvas\"))).value ; \n      // this.get(\"#log\").textContent += \"-> \" + result;       \n    } catch(err) {\n        \n      // this.get(\"#source\").currentEditor().getSession().setAnnotations(err.stack.split('\\n')\n      //   .filter(line => line.match('runCode???'))\n      //   .map(line => {\n      //     let [row, column] = line\n      //       .replace(/.*<.*>:/, '')\n      //       .replace(/\\)/, '')\n      //       .split(':')\n      //     return {\n      //       row: parseInt(row) - 1, column: parseInt(column), text: err.message, type: \"error\"\n      //     }\n      //   }));\n      this.get(\"#log\").textContent = \"\" + err\n    } finally {\n    \n    }\n    if (window.__tr_last_ast__)   {\n      this.ast = window.__tr_last_ast__\n      this.clearMarkers()\n      this.traceRoot = this.ast.calltrace\n      this.get(\"#traceInspector\").inspect(this.ast)\n\n      this.markCallTree(this.traceRoot)\n      this.updateTraceView(this.traceRoot)\n      this.updateMarkerResults(this.traceRoot)\n    }\n  }\n\n  updateTraceView(tree) {\n    this.get(\"#traceView\").innerHTML = \"\"\n    this.printTraceNode(this.get(\"#traceView\"), tree)\n  }\n\n  astNode(id) {\n    return this.ast.node_map[id] \n  }\n  \n  nodeToString(call) {\n    var node = call\n    var astnode = this.astNode(call.id) \n    var ast_node = astnode;\n    var label = \"\"\n    \n    switch(ast_node.type) {\n      case \"UpdateExpression\":\n        label = ast_node.argument.name + \"=\" + node.value \n        break;\n      case \"VariableDeclarator\":\n        label = ast_node.id.name + \"=\" + node.value\n        break\n      case \"ExpressionStatement\":\n        label = \"\"\n        break\n      case \"FunctionDeclaration\":\n        // label = \"\" + ast_node.id.name + \"()\"\n        label = \"\"\n        break\n      case \"CallExpression\":\n        // label = \"\" + ast_node.id.name + \"()\"\n        if (ast_node.callee.object)\n          label = ast_node.callee.object.name + \".\";\n        if (ast_node.callee.property)\n          label += ast_node.callee.property.name + \"()\"\n        break\n       case \"ForStatement\":\n          label = \"for{}\"\n        break\n       case \"BinaryExpression\":\n          label = \"\"\n        break\n\n      case \"AssignmentExpression\":\n        var name = ast_node.left.name\n        if (!name && ast_node.left.property)  \n          name = ast_node.left.property.name;\n        label = name + \"=\" + call.value\n        break\n      default:\n        label = ast_node.type\n    }\n    return label\n  }\n\n  get maxCallId() {\n    return 200\n  }\n\n\n  printTraceNode(parent, call) {\n    if (call.id > this.maxCallId) return\n    \n    var astnode = this.astNode(call.id) \n    \n    var node = document.createElement(\"div\");\n    node.setAttribute(\"class\", \"traceNode\")\n    \n    var label = this.nodeToString(call);\n    \n    node.innerHTML = \"<div class='traceLabel'> \" + label +\"</div>\"\n    node.setAttribute(\"title\", \"\" + astnode.type)\n    \n    node.id = call.markId\n    node.addEventListener(\"click\", (evt) => {\n      this.selectCallTraceNode(call)\n      evt.stopPropagation()\n    })\n\n    parent.appendChild(node)\n    call.children.forEach( ea => {\n      this.printTraceNode(node, ea)\n    })\n  }\n\n  clearMarkers() {\n    this.lastMarkCounter = 0\n    this.editor().getAllMarks()\n      .filter(ea => ea.isTraceMark)\n      .forEach(ea => ea.clear())\n  }\n\n  markCallTree(call) {\n    var ast_node = this.astNode(call.id)\n\n    if (ast_node && ast_node.start && ast_node.end) {\n      if (!call.markId) call.markId = 'tracemark' + this.lastMarkCounter++\n\n      var editor = this.editor()\n      editor.markText( \n        {line: ast_node.loc.start.line - 1, ch: ast_node.loc.start.column}, \n        {line: ast_node.loc.end.line - 1, ch: ast_node.loc.end.column}, \n        {\n          isTraceMark: true,\n          className: \"marked \" +  call.markId,\n          css: \"background-color: rgba(0,0,255,0.05)\",\n          title: ast_node.type\n        })\n    } \n    call.children.forEach(ea => {\n      this.markCallTree(ea)\n    })\n  }\n\n  updateMarkerResults(node) {\n    this.editor().clearGutter(\"rightgutter\")\n    var parentBounds = this.getBoundingClientRect()\n    this.updateMarkerResultsEach(this.get('#markerLayer'), node, parentBounds)\n  }\n  \n  addMarkerResult(line, text, node) {\n    var editor = this.editor()\n    var info = editor.lineInfo(line)\n    var gutterMarkers = info && info.gutterMarkers;\n    var markerLine = gutterMarkers && gutterMarkers.rightgutter\n    if (!markerLine) {\n        var markerLine = document.createElement(\"div\")\n        // markerLine.style.backgroundColor = \"rgb(240,240,240)\"\n        markerLine.style.fontSize = \"8pt\"\n        markerLine.style.whiteSpace = \"nowrap\"\n        // markerLine.style.overflow = \"hidden\"\n        markerLine.classList.add(\"markerLine\")  // markerLine    \n        editor.setGutterMarker(line, \"rightgutter\", markerLine)\n    }\n    var resultNode = document.createElement(\"span\");\n    resultNode.classList.add(\"markerResult\")\n    resultNode.classList.add(node.markId)\n    \n    // node.code + \" = \" +\n    resultNode.textContent =  text\n    \n    resultNode.id = node.markId\n    resultNode.addEventListener(\"click\", (evt) => {\n        this.selectCallTraceNode(node)\n        evt.stopPropagation()\n    })\n    markerLine.appendChild(resultNode)\n  }\n  \n  updateMarkerResultsEach(markerLayer, node, parentBounds) {\n    var ast_node = this.astNode(node.id)\n    if (ast_node.type == \"UpdateExpression\") {\n      this.addMarkerResult(ast_node.loc.start.line - 1, \n        ast_node.argument.name + \"=\" + node.value + \";\", node)\n    }\n    if (ast_node.type == \"VariableDeclarator\") {\n      this.addMarkerResult(ast_node.loc.start.line - 1, \n        ast_node.id.name + \"=\" + node.value + \";\", node)\n    }\n    if (ast_node.type == \"AssignmentExpression\") {\n      var name = ast_node.left.name\n      if (!name && ast_node.left.property)  \n        name = ast_node.left.property.name;\n      this.addMarkerResult(ast_node.loc.start.line - 1, \n        name   + \"=\" + node.value + \";\", node)\n    }\n    // if (ast_node.type == \"CallExpression\") {\n    //   this.addMarkerResult(ast_node.loc.start.line - 1, \n    //     ast_node.callee.name + \"(\"+ ast_node.arguments.map( ea => {\n    //       var eaCall = this.findBroadCallNode(ea.traceid, node) \n    //       return eaCall && eaCall.value \n    //     }).join(\",\")+\")=>\" + node.value + \";\", node)\n    // }\n    node.children.forEach(ea => this.updateMarkerResultsEach(markerLayer, ea, parentBounds))\n  }\n  \n  findBroadCallNode(id, node) {\n    return this.findBroadCallNodes(id, [node], new Map())\n  }\n\n  findBroadCallNodes(id, nodes, visited) {\n    while(nodes.length > 0) {\n      var ea = nodes.shift()  \n      if (ea.id == id) return ea\n      ea.children.forEach(child => {\n        if (!visited.get(child)) {\n          nodes.push(child)\n        }\n      })\n    }\n    return null\n  }\n\n  livelyMigrate(other) {\n    this.addEventListener(\"initialize\", () => {\n      this.get(\"#source\").setURL(other.get(\"#source\").getURL())\n      this.editor().setValue(other.editor().getValue())\n      // this.editor().selection.setRange(other.editor().selection.getRange())\n      // var viewState = other.get(\"#traceInspector\").getViewState()\n      \n      // #TODO time dependency... on what should we wait here?\n      setTimeout(() => this.runCode(),200)\n      \n      // this.get(\"#traceInspector\").setViewState(viewState)\n    })\n  }\n}\n\n\nShowPerformance.measure(ContinuousEditor, \"runCode\")\n"]}