{"modules":{"0.8393540358082126":{"definition":"//\n// step and delay\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 mods\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 = 'step and delay'\n//\n// initialization\n//\nvar init = function() {\n mod.value.value = ''\n mod.start.value = 0\n mod.stop.value = 10\n mod.step.value = 1\n mod.delay.value = 0.1\n mod.timeout == ''\n }\n//\n// inputs\n//\nvar inputs = {\n start:{type:'event',\n event:function(evt) {\n mod.nextvalue = parseFloat(mod.start.value)\n update_value()\n }}}\n//\n// outputs\n//\nvar outputs = {\n begin:{type:'event',\n event:function() {\n mods.output(mod,'begin','begin')\n }},\n value:{type:'number',\n event:function() {\n mods.output(mod,'value',parseFloat(mod.value.value))\n }},\n end:{type:'event',\n event:function() {\n mods.output(mod,'end','end')\n }}}\n//\n// interface\n//\nvar interface = function(div) {\n mod.div = div\n div.appendChild(document.createTextNode('value: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.value = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('start: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.start = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('stop: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.stop = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('step: '))\n input = document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.step = input\n div.appendChild(document.createElement('br'))\n div.appendChild(document.createTextNode('delay (s): '))\n input= document.createElement('input')\n input.type = 'text'\n input.size = 6\n div.appendChild(input)\n mod.delay = input\n div.appendChild(document.createElement('br'))\n var btn = document.createElement('button')\n btn.style.padding = mods.ui.padding\n btn.style.margin = 1\n btn.appendChild(document.createTextNode('start'))\n btn.addEventListener('click',function(){\n mod.nextvalue = parseFloat(mod.start.value)\n update_value()\n })\n div.appendChild(btn)\n var btn = document.createElement('button')\n btn.style.padding = mods.ui.padding\n btn.style.margin = 1\n btn.appendChild(document.createTextNode('stop'))\n btn.addEventListener('click',function(){\n window.clearTimeout(mod.timeout)\n mod.value.value = ''\n })\n div.appendChild(btn)\n var btn = document.createElement('button')\n btn.style.padding = mods.ui.padding\n btn.style.margin = 1\n var text = document.createTextNode('pause')\n mod.pause = text\n btn.appendChild(text)\n btn.addEventListener('click',function(){\n if (mod.timeout != '') {\n window.clearTimeout(mod.timeout)\n mod.pause.nodeValue = 'resume'\n mod.timeout = ''\n }\n else {\n mod.pause.nodeValue = 'pause'\n var delay = 1000*parseFloat(mod.delay.value)\n mod.timeout = window.setTimeout(update_value,delay)\n }\n })\n div.appendChild(btn)\n }\n//\n// local functions\n//\nfunction update_value() {\n var value = mod.nextvalue\n mod.value.value = value\n var start = parseFloat(mod.start.value)\n var stop = parseFloat(mod.stop.value)\n var step = parseFloat(mod.step.value)\n var delay = 1000*parseFloat(mod.delay.value)\n if (value == start)\n outputs.begin.event()\n if (start < stop) {\n if (value <= stop) {\n outputs.value.event()\n mod.nextvalue = value + step\n mod.timeout = window.setTimeout(update_value,delay)\n }\n else {\n mod.value.value = ''\n outputs.end.event()\n }\n }\n else {\n if (value >= stop) {\n outputs.value.event()\n mod.nextvalue = value + step\n mod.timeout = window.setTimeout(update_value,delay)\n }\n else {\n mod.value.value = ''\n outputs.end.event()\n }\n }\n }\n//\n// return values\n//\nreturn ({\n name:name,\n init:init,\n inputs:inputs,\n outputs:outputs,\n interface:interface\n })\n}())\n","top":"148","left":"370","inputs":{},"outputs":{}},"0.9071299592638544":{"definition":"//\r\n// delay event\r\n//\r\n// Neil Gershenfeld \r\n// (c) Massachusetts Institute of Technology 2016\r\n// \r\n// This work may be reproduced, modified, distributed, performed, and \r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is \r\n// provided as is; no warranty is provided, and users accept all \r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function(){\r\n//\r\n// module globals\r\n//\r\nvar mod = {}\r\n//\r\n// name\r\n//\r\nvar name = 'delay event'\r\n//\r\n// initialization\r\n//\r\nvar init = function() {\r\n mod.delay.value = 1\r\n }\r\n//\r\n// inputs\r\n//\r\nvar inputs = {\r\n input:{type:'event',\r\n event:function(evt){\r\n mod.input = evt.detail\r\n mod.event.value = JSON.stringify(evt.detail)\r\n delay_event()\r\n }}}\r\n//\r\n// outputs\r\n//\r\nvar outputs = {\r\n output:{type:'event',\r\n event:function(){\r\n mods.output(mod,'output',mod.input)\r\n }}}\r\n//\r\n// interface\r\n//\r\nvar interface = function(div){\r\n mod.div = div\r\n //\r\n // delay label\r\n //\r\n var span = document.createElement('span')\r\n var text = document.createTextNode('waiting for event')\r\n mod.label = text\r\n span.appendChild(text)\r\n mod.labelspan = span\r\n div.appendChild(span)\r\n //\r\n // delay value\r\n //\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode('delay (s): '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = 6\r\n input.addEventListener('change',function(){\r\n })\r\n div.appendChild(input)\r\n mod.delay = input\r\n //\r\n // event value\r\n //\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode('event value: '))\r\n var input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = 6\r\n input.addEventListener('change',function(){\r\n })\r\n div.appendChild(input)\r\n mod.event = input\r\n }\r\n//\r\n// local functions\r\n//\r\nfunction delay_event() {\r\n mod.label.nodeValue = 'delaying event'\r\n mod.labelspan.style.fontWeight = 'bold'\r\n var delay = 1000*parseFloat(mod.delay.value)\r\n window.setTimeout(after_delay,delay)\r\n }\r\nfunction after_delay() {\r\n mod.label.nodeValue = 'waiting for event'\r\n mod.labelspan.style.fontWeight = 'normal'\r\n outputs.output.event()\r\n }\r\n//\r\n// return values\r\n//\r\nreturn ({\r\n name:name,\r\n init:init,\r\n inputs:inputs,\r\n outputs:outputs,\r\n interface:interface\r\n })\r\n}())\r\n","top":"563","left":"388","inputs":{},"outputs":{}},"0.758534441472541":{"definition":"//\r\n// bar graph\r\n//\r\n// Neil Gershenfeld\r\n// (c) Massachusetts Institute of Technology 2016\r\n//\r\n// This work may be reproduced, modified, distributed, performed, and\r\n// displayed for any purpose, but must acknowledge the mods\r\n// project. Copyright is retained and must be preserved. The work is\r\n// provided as is; no warranty is provided, and users accept all\r\n// liability.\r\n//\r\n// closure\r\n//\r\n(function(){\r\n//\r\n// module globals\r\n//\r\nvar mod = {}\r\n//\r\n// name\r\n//\r\nvar name = 'bar graph'\r\n//\r\n// initialization\r\n//\r\nvar init = function() {\r\n var min = 0\r\n var max = 1\r\n mod.meter.min = min\r\n mod.min.value = min\r\n mod.meter.max = max\r\n mod.max.value = max\r\n mod.meter.value = (max+min)/2\r\n mod.value.value = mod.meter.value\r\n }\r\n//\r\n// inputs\r\n//\r\nvar inputs = {\r\n value:{type:'number',\r\n event:function(evt){\r\n mod.meter.value = parseFloat(evt.detail)\r\n mod.value.value = evt.detail\r\n }}}\r\n//\r\n// outputs\r\n//\r\nvar outputs = {}\r\n//\r\n// interface\r\n//\r\nvar interface = function(div){\r\n mod.div = div\r\n var meter = document.createElement('meter')\r\n meter.style.width = mods.ui.canvas\r\n meter.style.margin = mods.ui.padding\r\n div.appendChild(meter)\r\n mod.meter = meter\r\n div.appendChild(document.createElement('br'))\r\n div.appendChild(document.createTextNode('min: '))\r\n input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = 3\r\n input.addEventListener('input',function(evt){\r\n mod.meter.min = parseFloat(mod.min.value)\r\n })\r\n div.appendChild(input)\r\n mod.min = input\r\n div.appendChild(document.createTextNode(' value: '))\r\n input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = 3\r\n input.addEventListener('input',function(evt){\r\n mod.meter.value = parseFloat(mod.value.value)\r\n })\r\n div.appendChild(input)\r\n mod.value = input\r\n div.appendChild(document.createTextNode(' max: '))\r\n input = document.createElement('input')\r\n input.type = 'text'\r\n input.size = 3\r\n input.addEventListener('input',function(evt){\r\n mod.meter.max = parseFloat(mod.max.value)\r\n })\r\n div.appendChild(input)\r\n mod.max = input\r\n }\r\n//\r\n// local functions\r\n//\r\n;\r\n//\r\n// return values\r\n//\r\nreturn ({\r\n name:name,\r\n init:init,\r\n inputs:inputs,\r\n outputs:outputs,\r\n interface:interface\r\n })\r\n}())\r\n","top":"342","left":"1072","inputs":{},"outputs":{}}},"links":["{\"source\":\"{\\\"id\\\":\\\"0.9071299592638544\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"output\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.8393540358082126\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"start\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8393540358082126\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"end\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.9071299592638544\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"input\\\"}\"}","{\"source\":\"{\\\"id\\\":\\\"0.8393540358082126\\\",\\\"type\\\":\\\"outputs\\\",\\\"name\\\":\\\"value\\\"}\",\"dest\":\"{\\\"id\\\":\\\"0.758534441472541\\\",\\\"type\\\":\\\"inputs\\\",\\\"name\\\":\\\"value\\\"}\"}"]}