{"modules":{"0.37236863537691534":{"definition":"//\n// scalar math expression module\n//\n// Neil Gershenfeld \n// (c) Massachusetts Institute of Technology 2016\n// \n// This work may be reproduced, modified, distributed, performed, and \n// displayed for any purpose, but must acknowledge the fab modules \n// project. Copyright is retained and must be preserved. The work is \n// provided as is; no warranty is provided, and users accept all \n// liability.\n//\n// closure\n//\n(function(){\n//\n// module globals\n//\nvar mod = {}\n//\n// name\n//\nvar name = 'math expression'\n//\n// initialization\n//\nvar init = function() {\n mod.x = 123\n mod.xtext.value = mod.x\n expression = '3*x+0.5'\n mod.etext.value = expression\n outputs.y.event()\n }\n//\n// inputs\n//\nvar inputs = {\n x:{type:'number',\n event:function(evt){\n mod.x = evt.detail\n mod.xtext.value = mod.x\n outputs.y.event()}}}\n//\n// outputs\n//\nvar outputs = {\n y:{type:'number',\n event:function(){\n var x = mod.x\n var y = eval(mod.etext.value)\n mod.ytext.value = y\n mods.output(mod,'y',y)}}}\n//\n// interface\n//\nvar interface = function(div){\n mod.div = div\n div.appendChild(document.createTextNode('x: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n input.addEventListener('input',function(evt){\n mod.x = parseFloat(mod.xtext.value)\n outputs.y.event()\n })\n div.appendChild(input)\n mod.xtext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('expression: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 10\n input.addEventListener('input',function(evt){\n outputs.y.event()\n })\n div.appendChild(input)\n mod.etext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('y: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.ytext = input\n }\n//\n// local functions\n//\n;\n//\n// return values\n//\nreturn ({\n mod:mod,\n name:name,\n init:init,\n inputs:inputs,\n outputs:outputs,\n interface:interface\n })\n}())\n","top":"93","left":"186","inputs":{},"outputs":{}},"0.2581736098509282":{"definition":"//\n// scalar math expression module\n//\n// Neil Gershenfeld \n// (c) Massachusetts Institute of Technology 2016\n// \n// This work may be reproduced, modified, distributed, performed, and \n// displayed for any purpose, but must acknowledge the fab modules \n// project. Copyright is retained and must be preserved. The work is \n// provided as is; no warranty is provided, and users accept all \n// liability.\n//\n// closure\n//\n(function(){\n//\n// module globals\n//\nvar mod = {}\n//\n// name\n//\nvar name = 'math expression'\n//\n// initialization\n//\nvar init = function() {\n mod.x = 456\n mod.xtext.value = mod.x\n expression = '3*x+0.5'\n mod.etext.value = expression\n outputs.y.event()\n }\n//\n// inputs\n//\nvar inputs = {\n x:{type:'number',\n event:function(evt){\n mod.x = evt.detail\n mod.xtext.value = mod.x\n outputs.y.event()}}}\n//\n// outputs\n//\nvar outputs = {\n y:{type:'number',\n event:function(){\n var x = mod.x\n var y = eval(mod.etext.value)\n mod.ytext.value = y\n mods.output(mod,'y',y)}}}\n//\n// interface\n//\nvar interface = function(div){\n mod.div = div\n div.appendChild(document.createTextNode('x: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n input.addEventListener('input',function(evt){\n mod.x = parseFloat(mod.xtext.value)\n outputs.y.event()\n })\n div.appendChild(input)\n mod.xtext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('expression: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 10\n input.addEventListener('input',function(evt){\n outputs.y.event()\n })\n div.appendChild(input)\n mod.etext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('y: '))\n var input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.ytext = input\n }\n//\n// local functions\n//\n;\n//\n// return values\n//\nreturn ({\n mod:mod,\n name:name,\n init:init,\n inputs:inputs,\n outputs:outputs,\n interface:interface\n })\n}())\n","top":"322","left":"173","inputs":{},"outputs":{}},"0.7554988258052617":{"definition":"//\n// dyadic math expression module\n//\n// Neil Gershenfeld \n// (c) Massachusetts Institute of Technology 2016\n// \n// This work may be reproduced, modified, distributed, performed, and \n// displayed for any purpose, but must acknowledge the fab modules \n// project. Copyright is retained and must be preserved. The work is \n// provided as is; no warranty is provided, and users accept all \n// liability.\n//\n// closure\n//\n(function(){\n//\n// module globals\n//\nvar mod = {}\n//\n// name\n//\nvar name = 'math expression'\n//\n// initialization\n//\nvar init = function() {\n mod.x = 123\n mod.xtext.value = mod.x\n mod.y = 456\n mod.ytext.value = mod.y\n mod.etext.value = '3*x+4*y'\n outputs.z.event()\n }\n//\n// inputs\n//\nvar inputs = {\n x:{type:'number',\n event:function(evt){\n mod.x = evt.detail\n mod.xtext.value = mod.x\n outputs.z.event()}},\n y:{type:'number',\n event:function(evt){\n mod.y = evt.detail\n mod.ytext.value = mod.y\n outputs.z.event()}}}\n//\n// outputs\n//\nvar outputs = {\n z:{type:'number',\n event:function(){\n var x = mod.x\n var y = mod.y\n var z = eval(mod.etext.value)\n mod.ztext.value = z\n mods.output(mod,'z',z)}}}\n//\n// interface\n//\nvar interface = function(div){\n mod.div = div\n div.appendChild(document.createTextNode('x: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n input.addEventListener('input',function(evt){\n mod.x = parseFloat(mod.xtext.value)\n outputs.z.event()\n })\n div.appendChild(input)\n mod.xtext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('y: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n input.addEventListener('input',function(evt){\n mod.y = parseFloat(mod.ytext.value)\n outputs.z.event()\n })\n div.appendChild(input)\n mod.ytext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('expression: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 10\n input.addEventListener('input',function(evt){\n outputs.z.event()\n })\n div.appendChild(input)\n mod.etext = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('z: '))\n input= document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.ztext = input\n }\n//\n// local functions\n//\n;\n//\n// return values\n//\nreturn ({\n mod:mod,\n name:name,\n init:init,\n inputs:inputs,\n outputs:outputs,\n interface:interface\n })\n}())\n","top":"209","left":"696","inputs":{},"outputs":{}}},"links":["{\"source\":\"{\\\"id\\\":\\\"0.37236863537691534\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"y\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.7554988258052617\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"y\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.2581736098509282\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"y\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.7554988258052617\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"x\\\"}\"}"]}