{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/babylonian-programming-editor/ui/probe-widget.js"],"names":["Widget","DeleteButton","defaultExample","BabylonianWorker","MAX_VALUESTRING_LENGTH","ProbeWidget","constructor","editor","location","kind","deleteCallback","_values","Map","_activeRuns","iterationParentId","values","_update","setActiveRunForExampleId","exampleId","activeRun","set","unsetActiveRunForExample","delete","renderValue","value","undefined","HTMLElement","outerHTML","toString","elementForRun","run","prevRun","runElement","before","after","Array","combinedArray","map","e","i","length","push","arrayElement","entry","appendChild","ImageData","imageData","canvas","width","height","getContext","putImageData","Object","noBefore","type","combinedKeys","Set","keys","forEach","key","add","combinedObj","from","reduce","acc","propElement","identityElement","__tracker_identity","addEventListener","lively","openInspector","elementForExample","example","index","examples","valueElement","runs","get","id","has","maxRunId","tracker","iterations","runId","leftSpace","_deleteCallback","inspectorIcon","_onInspectorIconClicked","variableName","name","exampleName","color","_element","innerHTML","table","activeExamples","newChildren","filter","style","display","processExample","examplesAcc","entries","inspectorValue"],"mappings":"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","file":"probe-widget.js","sourcesContent":["import Widget from \"./widget.js\";\nimport { DeleteButton } from \"./buttons.js\";\nimport { defaultExample } from \"../utils/defaults.js\";\nimport BabylonianWorker from \"../worker/babylonian-worker.js\";\n\nconst MAX_VALUESTRING_LENGTH = 100;\n\nexport default class ProbeWidget extends Widget {\n  constructor(editor, location, kind, deleteCallback) {\n    super(editor, location, kind, deleteCallback);\n    this._values = new Map(); // Map(exampleId, Map(runId, [{type, value, name}]))\n    this._activeRuns = new Map(); // exampleId -> runId\n    this.iterationParentId = -1;\n  }\n  \n  set values(values) {\n    this._values = values;\n    this._update();\n  }\n\n  setActiveRunForExampleId(exampleId, activeRun) {\n    this._activeRuns.set(exampleId, activeRun);\n    this._update();\n  }\n  \n  unsetActiveRunForExample(exampleId) {\n    this._activeRuns.delete(exampleId);\n    this._update();\n  }\n\n  _update() {\n    \n    const renderValue = (value) => {\n      if(value === null || value === undefined) {\n        return null;\n      } else if(value instanceof HTMLElement) {\n        return value.outerHTML\n      } else if(value.toString) {\n        return value.toString();\n      } else {\n        return value;\n      }\n    }\n    \n    // Gets a string representaion for a single run\n    const elementForRun = (run, prevRun) => {\n      \n      \n      let runElement = null;\n      \n      if(!run || !(run.before || run.after)) {\n        return <span class=\"run noexec\">/</span>\n      }\n      \n      \n      // #FutureWork #Issue deal with promises...\n//       // run: we have a promise\n//       if(run.after &&  run.after.type == \"Promise\") {\n//         var promisedSpan = <span class=\"result\"></span>\n//         run.after.value.then(resolved => {\n//           promisedSpan.appendChild(elementForRun({after: {\n//             type: typeof resolved,\n//             value: resolved\n            \n//           }} ))\n//         })\n            \n//         return <span class=\"promise\">Promised{result}</span>\n//       }\n      \n      \n      if(run.after && (run.after.value instanceof Array)) {\n        // We have an array\n        if(run.before) {\n          const combinedArray = run.before.value.map(e => [e, undefined]);\n          for(let i in run.after.value) {\n            if(i < combinedArray.length) {\n              combinedArray[i][1] = run.after.value[i];\n            } else {\n              combinedArray.push([undefined, run.after.value[i]]);\n            }\n          }\n          const arrayElement = <span class=\"run array\"></span>;\n          for(let entry of combinedArray) {\n            if(entry[0] !== entry[1]) {\n              arrayElement.appendChild(<span class=\"old-value space-after\">{renderValue(entry[0])}</span>);\n            }\n            arrayElement.appendChild(<span class=\"new-value\">{renderValue(entry[1])}</span>);\n          }\n          runElement = arrayElement;\n        } else {\n          const arrayElement = <span class=\"run array\"></span>;\n          for(let entry of run.after.value) {\n            arrayElement.appendChild(<span class=\"new-value\">{renderValue(entry)}</span>);\n          }\n          runElement = arrayElement;\n        }\n      } else if(run.after.value instanceof ImageData) {\n        const imageData = run.after.value;\n        const canvas = <canvas\n                         class=\"run\"\n                         width={imageData.width}\n                         height={imageData.height}\n                         ></canvas>\n        canvas.getContext(\"2d\").putImageData(imageData, 0, 0);\n        runElement = canvas;\n      } else if(run.after.value instanceof Object\n                && !(run.after.value instanceof HTMLElement)) {\n        // We have to print the key-value pairs\n        let noBefore = false;\n        if(!run.before) {\n          run.before = {value: {}, type: undefined};\n          noBefore = true;\n        }\n        \n        // Combine all properties (before and after)\n        // {key: [oldValue, newValue]}\n        const combinedKeys = new Set()\n        Object.keys(run.before.value).forEach(key => combinedKeys.add(key));\n        Object.keys(run.after.value).forEach(key => combinedKeys.add(key));\n\n        const combinedObj = Array.from(combinedKeys)\n                                 .reduce((acc, key) => {\n                                   acc[key] = [run.before.value[key], run.after.value[key]];\n                                   return acc;\n                                 }, {});\n          \n        const propElement = <span class=\"properties\"></span>;\n        for(let key in combinedObj) {\n          if(key === \"__tracker_identity\") {\n            continue;\n          }\n          if(noBefore || combinedObj[key][0] === combinedObj[key][1]) {\n            propElement.appendChild(<span class=\"property\">\n                <span class=\"key\">{key}</span>\n                <span class=\"new-value\">{renderValue(combinedObj[key][1])}</span>\n              </span>);\n          } else {\n            propElement.appendChild(<span class=\"property\">\n                <span class=\"key\">{key}</span>\n                <span class=\"old-value\">{renderValue(combinedObj[key][0])}</span>\n                <span class=\"new-value\">{renderValue(combinedObj[key][1])}</span>\n              </span>);\n          }\n        }\n        \n        // Check the identity\n        let identityElement = <span class=\"identity space-after\"></span>;\n        if(combinedObj.__tracker_identity) {\n          if(combinedObj.__tracker_identity[0] && combinedObj.__tracker_identity[0] !== combinedObj.__tracker_identity[1] && !noBefore) {\n            identityElement.appendChild(<span class=\"old-value emoji \">\n                {combinedObj.__tracker_identity[0]}\n              </span>);\n          }\n          identityElement.appendChild(<span class=\"new-value emoji\">\n              {combinedObj.__tracker_identity[1]}\n            </span>);\n        }\n        \n        runElement = <span class=\"run object\">\n            {identityElement}\n            {propElement}\n          </span>;\n      } else {\n        // We can just print the value\n        if(!run.before ||\n           run.before.value === run.after.value ||\n           (prevRun && prevRun.after && prevRun.after.value === run.before.value)) {\n          runElement = <span class=\"run\">\n            <span class=\"new-value\">{renderValue(run.after.value)}</span>\n          </span>;\n        } else {\n          runElement = <span class=\"run\">\n            <span class=\"old-value\">{renderValue(run.before.value)}</span>\n            <span class=\"new-value\">{renderValue(run.after.value)}</span>\n          </span>;\n        }\n      }\n      \n      runElement.addEventListener(\"click\", () => {\n        lively.openInspector(run);\n      });\n      return runElement;\n    }\n    \n    // Gets a string representation for a single example\n    const elementForExample = (example, index, examples) => {\n      // example: {id, name, color}\n      let valueElement = <span class=\"probe-value\"></span>\n      const runs = this._values.get(example.id); // Map(runId, {type, value})\n      \n      if(this._activeRuns.has(example.id)\n         && this._activeRuns.get(example.id) !== -1) {\n        const run = runs.get(this._activeRuns.get(example.id));\n          valueElement.appendChild(\n            elementForRun(run, null)\n          );\n      } else {\n        let maxRunId = BabylonianWorker.tracker.iterations.get(this.iterationParentId).get(example.id);\n        \n        for(let runId = 0; runId < maxRunId; runId++) {\n          const prevRun = runId > 0 ? runs.get(runId-1) : null;\n          const run = runs.get(runId);\n            valueElement.appendChild(\n              elementForRun(run, prevRun)\n            );\n        }\n      }\n      \n      // Show some UI only for the first element\n      let leftSpace = <span></span>;\n      if(index === 0) {\n        // Delete butotm\n        leftSpace.appendChild(DeleteButton(this._deleteCallback));\n        \n        // Inspector icon\n        const inspectorIcon = <span class=\"icon inspector space-before\"></span>;\n        inspectorIcon.addEventListener(\"click\", () => {\n          this._onInspectorIconClicked(examples);\n        });\n        leftSpace.appendChild(inspectorIcon);\n      }\n      \n      let variableName = <span></span>;\n      if(index === 0) {\n        variableName = <span class=\"id-name space-after\">{Array.from(runs.values())[0].after.name}</span>;\n      }\n      \n      let exampleName = \"\";\n      if(example.id !== defaultExample().id) {\n        exampleName = <span\n          class=\"example-name space-after\"\n          style={\"background-color:\" + example.color}>\n          {example.name.value.length ? example.name.value : \"\\u00A0\"}\n        </span>;\n      }\n      \n      return <tr class=\"widget-line\">\n        <td class=\"probe-meta\">\n          {leftSpace}\n          {variableName}\n        </td>\n        <td class=\"probe-example\">\n          {exampleName}\n          {valueElement}\n        </td>\n      </tr>\n    }\n    \n    // Iterate over all examples and get their values\n    this._element.innerHTML = \"\";\n    let table = <table></table>;\n    this._element.appendChild(table);\n    let examples = Array.from(BabylonianWorker.activeExamples);\n    \n    const newChildren = examples.filter((e) => this._values.has(e.id))\n                                .map(elementForExample);\n    newChildren.forEach((e) => table.appendChild(e));\n    \n    // Hide if empty\n    if(newChildren.length === 0) {\n      this._element.style.display = \"none\";\n    } else {\n      this._element.style.display = \"\";\n    }\n  }\n  \n  _onInspectorIconClicked(examples) {\n    const processExample = (examplesAcc, example) => {\n      const runs = this._values.get(example.id);\n      const value = Array.from(runs.entries())\n                         .reduce((acc, run) => {\n                           acc[run[0]] = run[1];\n                           return acc\n                         }, []);\n      const key = (example.name.value && example.name.value.length) ?\n                  `${example.name.value} (${example.id})` :\n                  `Unnamed example (${example.id})`;\n      examplesAcc[key] = value;\n      return examplesAcc;\n    }\n    \n    const inspectorValue = examples.filter(example => this._values.has(example.id))\n                                   .reduce(processExample, {});\n    \n    lively.openInspector(inspectorValue);\n  }\n}\n/* Context: {\"context\":{\"prescript\":\"\",\"postscript\":\"\"},\"customInstances\":[]} */"]}