{"version":3,"sources":["redux/reducers/packetDataSlice.ts","components/interpreter/turtleMath.js","redux/reducers/projectIdSlice.ts","components/interpreter/includes.js","components/interpreter/Tokenizer.js","redux/reducers/testSlice.ts","images/connect-icon.png","components/interpreter/Interpreter.js","images/cloud-save.png","images/download.png","images/new-window.png","images/newProject.png","images/upload.png","experiments/Blank.logo","experiments/ModelMolecules.logo","experiments/BasicBoard.logo","experiments/LightShow.logo","experiments/IntroSensors.logo","images/twopane.png","images/three-pane.png","experiments/Motion.logo","experiments/Position.logo","experiments/PacketsNew.logo","experiments/fm_dev.logo","components/Projects.js","components/UserMenu/Project.js","components/UserMenu/UserMenu.js","config.js","redux/hooks.ts","components/Header.js","data/experiments.js","components/NewProjectModal.js","components/editorOptions.js","components/Chart.js","components/OpenDataModal.js","components/DataTable.js","components/Terminal.js","App.js","components/MotionTable.js","serviceWorker.js","index.js","redux/store.ts"],"names":["packetDataSlice","createSlice","name","initialState","value","status","reducers","clear","state","add","action","concat","_toConsumableArray","payload","load","_packetDataSlice$acti","actions","selectData","packetData","turtleMath","cosdeg","x","Math","cos","PI","rad","a","sindeg","sin","deg","projectIdSlice","set","_projectIdSlice$actio","selectProjectId","projectId","includes","Tokenizer","stringToEvaluate","_classCallCheck","this","replace","offset","_createClass","key","t","readList","arrayOfTokens","skipSpace","eof","token","readToken","push","s","peekChar","nextChar","res","c","readString","delim","next","n","Number","isNaN","first","charAt","data","console","log","JSON","parse","e","readObject","indexOf","skipComment","length","tokenize","TestSlice","testClear","testSet","_TestSlice$actions","selectTestValue","module","exports","port","reader","outputStream","_regeneratorRuntime","Op","Object","prototype","hasOwn","hasOwnProperty","defineProperty","obj","desc","$Symbol","Symbol","iteratorSymbol","iterator","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","toStringTag","define","enumerable","configurable","writable","err","wrap","innerFn","outerFn","self","tryLocsList","protoGenerator","Generator","generator","create","context","Context","makeInvokeMethod","tryCatch","fn","arg","type","call","ContinueSentinel","GeneratorFunction","GeneratorFunctionPrototype","IteratorPrototype","getProto","getPrototypeOf","NativeIteratorPrototype","values","Gp","defineIteratorMethods","forEach","method","_invoke","AsyncIterator","PromiseImpl","previousPromise","callInvokeWithMethodAndArg","resolve","reject","invoke","record","result","__await","then","unwrapped","error","Error","doneResult","delegate","delegateResult","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","done","methodName","undefined","return","TypeError","info","resultName","nextLoc","pushTryEntry","locs","entry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iterable","iteratorMethod","i","displayName","isGeneratorFunction","genFun","ctor","constructor","mark","setPrototypeOf","__proto__","awrap","async","Promise","iter","keys","val","object","reverse","pop","skipTempReset","prev","slice","stop","rootRecord","rval","exception","handle","loc","caught","hasCatch","hasFinally","finallyEntry","complete","finish","catch","thrown","delegateYield","mod","flushtime","constants","pi","chartPointColors","Interpreter","props","canvasHidden","store","instantiatedObjects","lastProc","offsetHorizontal","updateChartOptions","updateChartType","turtleScale","singleChartXVariable","topChartXVariable","bottomChartXVariable","singleChartYVariable","topChartYVariable","bottomChartYVariable","pushNewChartData","ticker","bind","isDone","cnvWidth","cnvHeight","scale","ctx","document","getElementById","xcor","ycor","heading","color","shade","colorInHex","opacity","pendown","pensize","size","font","fontsize","dpi","zoom","snaps","scatterChart","colors","procs","terminal","prompt","onfocus","focused","readProcs","onkeydown","ctrlKey","keyCode","preventDefault","stopPropagation","focus","runLine","insert","evline","cfun","arglist","priority","stack","frame","locals","hold","timeout","clockspeed","respfcn","respCount","resp","respStr","fe","src","printToConsole","element","appendChild","img","onload","width","height","style","move","canvas","getContext","clientWidth","clientHeight","textBaseline","clean","window","requestAnimationFrame","handleResize","floor","Date","now","beginPath","globalAlpha","moveTo","sx","sy","lineTo","stroke","fillpath","y","seth","r","sgn","abs","ar","dx","dy","cx","cy","astart","aend","dir","arc","leftArc","rightArc","visibility","setCtxColorShade","fillRect","setCtxColorCSS","sh","ps","lineWidth","fill","l","setLineDash","getState","dispatch","updatedState","imageLocation","coordinates","xpos","ypos","objectElement","createElement","setAttribute","styles","position","top","offsetHeight","left","offsetWidth","assign","id","remove","axis","variable","Array","isArray","listenerVariables","map","getValue","setValue","chartOptions","title","display","text","scales","yAxes","scaleLabel","labelString","ticks","xAxes","legend","responsive","maintainAspectRatio","animation","duration","elements","point","radius","backgroundColor","chartType","getValueInternal","rangeSetting","domainSetting","updateChartData","shiftKey","insertcr","handlecr","pos","selectionStart","start","lastIndexOf","end","str","substring","before","after","selectionEnd","some","word","toLowerCase","save","translate","rotate","fillText","restore","f","firstChild","transform","outOfBounds","showCanvas","hideCanvas","newScale","wrapper","heightScale","lineCap","lineJoin","textAlign","showTurtle","b","nextRandomDouble","random","url","Image","drawImage","onerror","dataurl","fcn","naturalWidth","blend","ag","ab","br","bg","bb","round","cc","toString","strokeStyle","fillStyle","setCtxColor","mc","ic","fract","colorFromNumber","mergeColorShade","toBeEvaluated","procString","thisproc","prims","lines","split","j","procLines","sl","nargs","inputs","gatherSource","p","prim","parsed","parseProcs","evalNext","last","clearTimeout","_step","stringHolder","_iterator","_createForOfIteratorHelper","innerHTML","scrollTop","scrollHeight","funcall","shift","evalEOL","pushResult","evalString","flow","apply","primCall","bindings","unshift","bindArgs","evalLine","procOutput","procCall","printstr","isInfixNext","updateChart","_step2","_iterator2","_step3","_iterator3","types","chartData","xDataArray","yDataArray","_step4","_iterator4","_step5","_iterator5","_step6","_iterator6","_step7","_iterator7","_step8","_iterator8","_step9","_iterator9","varCount","dataHolder","count","pointBackgroundColor","getnum","repeatAgain","flowEnd","loopAgain","breakLoop","l1","l2","String","join","equals","getDate","hour","getHours","getMinutes","getSeconds","second","minute","getMilliseconds","getTime","unixT","timezoneoffset","getTimezoneOffset","isoLocal","toISOString","date","time","len","la","lb","setTimeout","line","column","colNum","columnData","_step10","_iterator10","packet","sendReceive","gotSensorasCelcius","gotsensor","alterPing","alterTest","celcius","dread","gotpin","newString","valuesToCalibrate","calibrationValues","_step11","calibrationResults","slope","_iterator11","addr","cmd","twobytes","sendl","sendMessage","readable","message","Uint8Array","writer","getWriter","write","releaseLock","command","_openSerialPort","_asyncToGenerator","_callee","_context","navigator","serial","requestPort","open","baudRate","getReader","startReading","arguments","_disconnectSerialPort","_callee2","_context2","cancel","close","_startReading","_callee3","_yield$reader$read","_context3","read","handleReceiveData","t0","_handleReceiveData","_callee4","receivedValue","_context4","from","gotChar","_x","Uint8Arr","Buffer","readUIntBE","variableValue","setclass","aboutClass","setChartListener","d","calibrateList","repeat","loop","logo_if","getbool","logo_ifelse","logo_run","initPlot","clearPlot","break","mwait","ceil","sqrt","getRandom","tan","getPacketColumn","pow","butfirst","butlast","getlist","item","member","isDefined","cleanConsole","forward","right","lineto","fillscreen","getcolor","setcolor","setshade","setpensize","startfill","endfill","drawString","setfont","setfontsize","setlinedash","hideTurtle","setup","loadimg","ipm_se","getDateTime","NowSeconds","hours","minutes","seconds","twoDigit","pushToArray","setLocalValue","loadBackgroundImage","ledOn","ledOff","pinOn","pinOff","fnc","readSensor","pinNumber","readIR","readVisible","readPing","readTest","readVel","readAccel","_test","readADUAsCelcius","deltaTime","moveInsantiatedObject","deleteInsantiatedObject","createInstantiatedObject","localDatabase","Dexie","Projects","updateCode","globalUpdateCode","_initializeDatabase","version","stores","projects","_writeLastCodeToLocalStorage","code","getRecoverEntry","_ref","entries","recoveryId","update","_x2","_writePidToStorage","_callee5","pid","_context5","_ref2","_x4","_x3","_getRecoverEntry","_callee6","returnValue","_context6","where","toArray","filename","textToSave","newFile","Blob","URL","createObjectURL","href","download","body","click","removeChild","revokeObjectURL","scopedUpdate","file","files","fileReader","FileReader","fileLoadedEvent","textFromFileLoaded","target","readAsText","Project","_useState","useState","_useState2","_slicedToArray","deleting","setDeleting","copyProjectLink","process","clipboard","writeText","lastSavedDate","dateString","getMonth","getFullYear","convertDate","project","saved","React","Fragment","className","marginTop","padding","border","paddingBottom","marginRight","fontSize","cursor","onClick","deleteProject","getSingleProject","UserMenu","projectList","setProjectList","useEffect","networkError","minWidth","maxHeight","minHeight","paddingRight","paddingLeft","zIndex","overflowY","writePidToStorage","writeLastCodeToLocalStorage","localStorage","removeItem","firebase","auth","signOut","paddingTop","lineHeight","marginBlockStart","marginBlockEnd","textShadow","recoveryEntry","loadRecoveredCode","config","apiUrl","apiKey","authDomain","storageBucket","messagingSenderId","appId","useAppSelector","useSelector","Header","userLogoStyle","borderRadius","justifyContent","alignItems","user","useUser","reactAuth","useAuth","_useState3","_useState4","userMenuShow","setUserMenuShow","_useState5","_useState6","projectAuthor","setProjectAuthor","_useState7","_useState8","setRecoveryEntry","_useState9","_useState10","projectLastSaved","setProjectLastSaved","_useState11","_useState12","lastUsername","setLastUsername","_useState13","_useState14","setNetworkError","loadFile","saveAs","toggleNewProject","toggleNewProjectModal","getItem","location","pathname","axios","get","response","ownerDisplayName","setItem","getUserProjects","recoveryProject","_window$location$path","_window$location$path2","substr","initializeDatabase","setInterval","codeElement","toggleUserMenu","signIn","signInWithPopup","GoogleAuthProvider","currentUser","getIdToken","idToken","post","email","headers","authorization","saveToCloud","codeToSave","projectTitle","patch","userId","uid","dataMode","history","pushState","openPid","setDataMode","titleElement","tabIndex","onKeyDown","verticalAling","defaultValue","maxLength","onBlur","saveTitle","pointerEvents","newProjectIcon","alt","downloadIcon","uploadIcon","saveIcon","newWindowIcon","connectIcon","delete","showMenu","experimentsList","blank","view","LightShow","BasicBoard","IntroToSensors","ModelMolecules","OpenDataModal","toggleModal","request","XMLHttpRequest","send","onreadystatechange","readyState","responseText","currentDataMode","setView","loadNewTemplate","languageDef","defaultToken","number","keywords","operators","symbols","tokenizer","root","include","cases","whitespace","numbers","stringsUpdated","strings","tags","configuration","comments","lineComment","brackets","Chart","chartRefSingle","useRef","chartRefTop","chartRefBottom","current","chartInstance","base64image","toBase64Image","downloadSingle","margin","Scatter","datasets","chartDataSingle","options","chartOptionsSingle","redraw","ref","chartDataTop","chartOptionsTop","chartDataBottom","chartOptionsBottom","availableData","setAvailableData","marginBottom","index","dataId","unixtime","input","DataTable","dataModalOpen","setDataModalOpen","row","overflow","dataLine","accept","onChange","parsedFile","textInLines","lineData","importData","marginLeft","Terminal","interpreter","terminalEntries","setTerminalData","terminalSelection","setTerminalSelection","moved","scrollToBottom","handleKeyDown","inputValue","innerText","newData","handleEnter","selectedEntry","range","createRange","sel","getSelection","setStart","childNodes","collapse","removeAllRanges","addRange","getSelectedLine","addEventListener","originalEvent","clipboardData","getData","execCommand","terminalWrapper","setMovedTrue","offsetX","upListener","removeEventListener","outline","_defineProperty","overflowX","fontFamily","contentEditable","MotionTable","App","showNewProjectModal","setShowNewProjectModal","setCode","twoPane","setTwoPane","horizontalOffset","setHorizontalOffset","setChartType","setChartDataSingle","_useState15","_useState16","setChartDataTop","_useState17","_useState18","setChartDataBottom","_useState19","_useState20","setChartOptionsTop","_useState21","_useState22","setChartOptionsBottom","_useState23","_useState24","setChartOptionsSingle","checkIfSerialCapable","getBoundingClientRect","pushChartData","onresize","connectButton","disconnectButton","openSerialPort","disconnectSerialPort","newType","newOptions","newCode","toggleShowNewProjectModal","_useState25","_useState26","handleDataChange","mode","NewProjectModal","currentView","threePaneImg","twoPaneImg","maxWidth","MonacoEditor","language","theme","quickSuggestionsDelay","selectOnLineNumbers","automaticLayout","minimap","enabled","editorDidMount","editor","monaco","editorWillMount","languages","getLanguages","register","setMonarchTokensProvider","setLanguageConfiguration","defineTheme","base","inherit","rules","foreground","whiteSpace","readOnly","spellCheck","onMouseDown","handleDrag","handleResizeHorizontal","clientX","handleMouseUp","dragToResize","isLocalhost","Boolean","hostname","match","registerValidSW","swUrl","serviceWorker","registration","onupdatefound","installingWorker","installing","onstatechange","controller","isUpdateAvailable","newDiv","newContent","createTextNode","onUpdate","onSuccess","ReactDOM","render","FirebaseAppProvider","firebaseConfig","Suspense","fallback","StrictMode","Provider","origin","fetch","contentType","ready","unregister","reload","checkValidServiceWorker","configureStore","reducer","packetDataReducer","projectIdReducer"],"mappings":"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","file":"static/js/main.2ab12f38.chunk.js","sourcesContent":["import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../store';\n\nexport interface PacketDataSlice {\n value: any[];\n status: 'idle' | 'loading' | 'failed';\n}\n\nconst initialState: PacketDataSlice = {\n value: [],\n status: 'idle',\n};\n\nexport const packetDataSlice = createSlice({\n name: 'packetData',\n initialState,\n // The `reducers` field lets us define reducers and generate associated actions\n reducers: {\n clear: (state) => {\n state.value = [];\n },\n // Use the PayloadAction type to declare the contents of `action.payload`\n add: (state, action: PayloadAction) => {\n state.value = [...state.value, action.payload];\n },\n load: (state, action: PayloadAction) => {\n state.value = [...action.payload]\n }\n },\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\n // including actions generated by createAsyncThunk or in other slices.\n\n});\n\nexport const {clear, add, load} = packetDataSlice.actions;\n\n// The function below is called a selector and allows us to select a value from\n// the state. Selectors can also be defined inline where they're used instead of\n// in the slice file. For example: `useSelector((state: RootState) => state.counter.value)`\nexport const selectData = (state: RootState) => state.packetData.value;\n\n\nexport default packetDataSlice.reducer;\n","const turtleMath = {\n cosdeg: function(x){\n return Math.cos(x * 2 * Math.PI / 360); \n },\n\n rad: function(a){\n return a * 2 * Math.PI / 360;\n },\n\n sindeg: function(x){\n return Math.sin(x*2*Math.PI/360);\n },\n\n deg: function(a){\n return a * 360 / (2 * Math.PI);\n }\n}\n\nexport default turtleMath;","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../store';\n\nexport interface ProjectIdSlice {\n value: string | null;\n status: 'null' | 'loading' | 'active';\n}\n\nconst initialState: ProjectIdSlice = {\n value: null,\n status: 'null',\n};\n\nexport const projectIdSlice = createSlice({\n name: 'projectId',\n initialState,\n // The `reducers` field lets us define reducers and generate associated actions\n reducers: {\n clear: (state) => {\n state.value = null;\n },\n // Use the PayloadAction type to declare the contents of `action.payload`\n set: (state, action: PayloadAction) => {\n state.value = action.payload;\n }\n },\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\n // including actions generated by createAsyncThunk or in other slices.\n\n});\n\nexport const {clear, set } = projectIdSlice.actions;\n\n// The function below is called a selector and allows us to select a value from\n// the state. Selectors can also be defined inline where they're used instead of\n// in the slice file. For example: `useSelector((state: RootState) => state.counter.value)`\nexport const selectProjectId = (state: RootState) => state.projectId.value;\n\n\nexport default projectIdSlice.reducer;\n","export const includes = \n`\n to receive-packet\n if (is-defined '_packet-length') = false\n [\n make '_packet-length' 6\n ]\n\n\n\n make '_checksum' 0\n\n make '_packet-type' 'T1'\n ;always T1 right now because these aren't defined yet\n\n let \"i 0\n make '_last-packet' :_packet-type\n make \"_last-packet se :_last-packet now\n make \"_last-packet se :_last-packet :_packet-length\n\n repeat ( :_packet-length ) [\n let \"_adc-holder readADC :i\n make \"_last-packet se :_last-packet ( :_adc-holder )\n let 'i' :i + 1\n make \"_checksum :_checksum + (:_adc-holder)\n ]\n\n make \"_last-packet se :_last-packet :_checksum\n\n if (is-defined '_packet-log') = false \n [\n make '_packet-log' false\n ]\n\n if (:_packet-log = true)[\n logData :_last-packet\n ]\n\n end\n\n to ReceivePacket \n if (is-defined '_packet-length') = false\n [\n make '_packet-length' 6\n ]\n \n make '_checksum' 0\n\n let \"i 0\n let \"date_time getDateTime\n let \"date nth 0 :date_time\n let \"time nth 1 :date_time\n let \"unix_time now ;in seconds, changed from milliseconds\n\n make '_last-packet' :date\n make \"_last-packet se :_last-packet :time\n make \"_last-packet se :_last-packet :unix_time\n\n repeat ( :_packet-length ) [\n let \"done false\n \n ;recieve values as ADC units\n if (:i < 4) [ ;I'm not sure why I set this to 6, 4 would probably make more sense based on the cases below\n let \"_adc-holder readADC :i\n ]\n\n ;Case check for lux and celcius conversion\n if (:i = 0) [\n let \"_lux ConvertToLux :_adc-holder\n make \"_last-packet se :_last-packet ( round :_lux )\n let \"done true\n ]\n if (:i > 0 and :i < 4) [\n ;Celcius\n let \"_celcius round (0.5348 * (:_adc-holder - 148.6)) + 13\n make \"_last-packet se :_last-packet ( :_celcius )\n let \"done true\n ]\n \n ;Removing the motion sensor data calls for the January PLE, will be put back after\n if (:i >= 4) [ ;this line basically skips the calls if the packet count is set too high, will remove when the other data is put back.\n let \"done true\n ]\n \n if (:done = false)[ make \"_last-packet se :_last-packet ( :_adc-holder ) ]\n let 'i' :i + 1\n make \"_checksum :_checksum + (:_adc-holder)\n ]\n\n ;Check if the packet is being logged\n if (is-defined '_packet-log') = false \n [\n make '_packet-log' false\n ]\n if (:_packet-log = true)[\n logData :_last-packet\n ]\n end\n\n\n to RecieveMotionPacket \n _packetSetup ;sets up date, time, deltatime\n \n set-packet-count 6\n set-packet-save true\n\n make '_last-packet' :date\n make \"_last-packet se :_last-packet :time\n make \"_last-packet se :_last-packet :unix_time\n\n make \"_last-packet se :_last-packet readPing\n make \"_last-packet se :_last-packet readVel\n ;make \"_last-packet se :_last-packet readAccel\n\n print :_last-packet\n\n _logCheck ;checks if the packet is being logged\n end\n\n\n to _packetSetup\n if (is-defined '_packet-length') = false\n [\n make '_packet-length' 6\n ]\n \n make '_checksum' 0\n\n make \"i 0\n make \"date_time getDateTime\n make \"date nth 0 :date_time\n make \"time nth 1 :date_time\n make \"unix_time NowMilli\n\n make '_last-packet' :date\n make \"_last-packet se :_last-packet :time\n make \"_last-packet se :_last-packet :unix_time\n end\n\n to _logCheck\n ;Check if the packet is being logged\n if (is-defined '_packet-log') = false \n [\n make '_packet-log' false\n ]\n if (:_packet-log = true)[\n logData :_last-packet\n ]\n end\n\n\n\n to recievePacketInCelcius\n make '_packet-length' 6\n make '_checksum' 0\n\n make '_packet-type' 'T1'\n ;always T1 right now because these aren't defined yet\n\n let \"i 0\n make '_last-packet' :_packet-type\n make \"_last-packet se :_last-packet now\n make \"_last-packet se :_last-packet :_packet-length\n\n repeat ( :_packet-length ) [\n let \"_adc-holder readADC :i\n ADUtoCelcius :_adc-holder\n let \"x readADUAsCelcius :i\n print 'ADU: '\n print :x\n let \"_adc-holder :output\n make \"_last-packet se :_last-packet ( :_adc-holder )\n let 'i' :i + 1\n make \"_checksum :_checksum + (:_adc-holder)\n ]\n\n make \"_last-packet se :_last-packet :_checksum\n\n if (is-defined '_packet-log') = false \n [\n make '_packet-log' false\n ]\n\n if (:_packet-log = true)[\n logData :_last-packet\n ]\n \n end\n\n to GetTempADCs\n make \"adcList []\n push \"adcList readADC1\n push \"adcList readADC2\n push \"adcList readADC3\n print :adcList\n end\n\n to CalibrateTempSensor :adcVal :sensorNum\n if (:sensorNum = 1) [\n ifelse (is-defined \"slope1) [\t\n let \"temp :slope1 * :adcVal + :b1\n return round :temp\n ][print 'Sensor 1 not calibrated']\n ]\n if (:sensorNum = 2) [\n ifelse (is-defined \"slope2) [\n let \"temp :slope2 * :adcVal + :b2\n return round :temp\n ][print 'Sensor 2 not calibrated']\n ]\n if (:sensorNum = 3) [\n ifelse (is-defined \"slope3) [ \n let \"temp :slope3 * :adcVal + :b3\n return round :temp\n ][print 'Sensor 3 not calibrated']\n ]\n \n return :adcVal\n end\n\n to CalibrationSetup :adcLow :tmpLow :adcHigh :tmpHigh :sensorNum \n let \"slope (:tmpHigh - :tmpLow) / (:adcHigh - :adcLow)\n let \"b :tmpLow - (:slope * :adcLow)\n\n if (:sensorNum = 1) [\n make \"slope1 :slope\n make \"b1 :b\n ]\n if (:sensorNum = 2) [\n make \"slope2 :slope\n make \"b2 :b\n ]\n if (:sensorNum = 3) [\n make \"slope3 :slope\n make \"b3 :b\n ]\n end\n\n to ConvertToLux :adu\n let \"_lux (4.2866 * :adu) - 2.6713\n if :_lux < 0 [make \"_lux 0]\n return :_lux\n end\n\n to ADUtoCelcius :adu\n make \"output ( :adu * 5 ) / 1024.9\n make \"output ( :output - 0.5 ) * 100\n end\n\n to set-packet-count :n\n make '_packet-length' :n\n end\n\n to set-packet-save :value\n make '_packet-log' :value\n end\n\n to set-packet-mode :mode\n make '_packet-mode' :mode\n end\n\n to readLightSensor\n output readADC2\n end\n\n to readTempSensor0\n output readADC0\n end\n\n to readTempSensor1\n output readADC1\n end\n\n to readTempSensor2\n output readADC2\n end\n\n to showxy\n print tcor\n end\n\n\n\n\n`;\n","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\" */\n\nexport default class Tokenizer {\n constructor(stringToEvaluate) {\n this.stringToEvaluate = stringToEvaluate.replace('//', ';');\n this.offset = 0;\n }\n\n static parse(s) {\n return new Tokenizer(s).tokenize();\n }\n\n tokenize() {\n var t = this;\n return readList();\n\n function readList() {\n var arrayOfTokens = [];\n skipSpace();\n while (true) {\n if (eof()) break;\n var token = readToken();\n if (token == null) break;\n arrayOfTokens.push(token);\n }\n return arrayOfTokens;\n }\n\n //when faced with {}, interpret it as an object (JavaScript native style)\n //this will work with make/let, but it needs to be in JSON format - double quotes and the like - and needs spaces between brackets and text\n\n //It doesn't work with strings properly because JSLogo is trying to interpret it as we go I think\n //even if you use a replace function for single quotes it behaves odd, so you need double quotes\n //If you use double quotes with spaces, the spaces get deleted\n\n function readObject() {\n var data = \"\";\n // skipSpace();\n while (true) {\n if (eof()) break;\n var token = readToken();\n if (token == null) break;\n data = data + token;\n }\n\n data = '{' + data + '}';\n\n try {\n console.log(data)\n data = JSON.parse(data);\n } catch (e) {\n console.log(e);\n }\n\n finally {\n return(data);\n }\n\n\n }\n\n function readToken() {\n var s = next();\n var n = Number(s);\n if (!isNaN(n)) return n;\n var first = s.charAt(0);\n if (first === \"]\") return null;\n if (first === \"[\") return readList();\n if (first === \"{\") return readObject();\n if (first === \"}\") return null;\n return s;\n }\n\n function next() {\n if (peekChar() === \"'\" || peekChar() === \"|\") return readString();\n var res = '';\n if (delim()) res = nextChar();\n else {\n while (true) {\n if (eof()) break;\n if (delim()) break;\n else res += nextChar();\n }\n }\n skipSpace();\n return res;\n }\n\n function readString() {\n nextChar();\n var res = \"'\";\n while (true) {\n if (eof()) return res + \"'\";\n var c = nextChar();\n res += c;\n if (c == \"'\") { skipSpace(); return res; }\n }\n }\n\n function skipSpace() {\n while (true) {\n if (eof()) return;\n var c = peekChar();\n if (c == ';') { skipComment(); continue; }\n if (\" \\t\\r\\n,\".indexOf(c) == -1) return;\n nextChar();\n }\n }\n\n function skipComment() {\n while (true) {\n var c = nextChar();\n if (eof()) return;\n if (c == '\\n') return;\n }\n }\n\n function delim() { return \"()[] \\t\\r\\n\".indexOf(peekChar()) != -1; }\n function peekChar() { return t.stringToEvaluate.charAt(t.offset); }\n function nextChar() { return t.stringToEvaluate.charAt(t.offset++); }\n function eof() { return t.stringToEvaluate.length == t.offset; }\n\n }\n}","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { RootState } from '../store';\n\nexport interface TestSlice {\n value: string | null;\n status: 'null' | 'loading' | 'active';\n}\n\nconst initialState: TestSlice = {\n value: null,\n status: 'null',\n};\n\nexport const TestSlice = createSlice({\n name: 'testSlice',\n initialState,\n // The `reducers` field lets us define reducers and generate associated actions\n reducers: {\n testClear: (state) => {\n state.value = null;\n },\n // Use the PayloadAction type to declare the contents of `action.payload`\n testSet: (state, action: PayloadAction) => {\n state.value = action.payload;\n },\n },\n // The `extraReducers` field lets the slice handle actions defined elsewhere,\n // including actions generated by createAsyncThunk or in other slices.\n\n});\n\nexport const {testClear, testSet } = TestSlice.actions;\n\n// The function below is called a selector and allows us to select a value from\n// the state. Selectors can also be defined inline where they're used instead of\n// in the slice file. For example: `useSelector((state: RootState) => state.counter.value)`\nexport const selectTestValue = (state: RootState) => state.projectId.value;\n\n\nexport default TestSlice.reducer;\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTExLTA1VDEzOjI3OjAxLTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjoyOS0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjoyOS0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoyZmZkYjJlNC0wNWNhLTZkNDctYWRhOS0xMTNkMmU1ZGE1Y2MiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxYjU3YjIwYi1lZDVkLTQ4NDktODRhMi00NTA5MDlhODRmNzAiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpiODM4MzMxZS0xN2MyLTZjNDItODdjZC1kMDk5NjFjODA1NGMiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmI4MzgzMzFlLTE3YzItNmM0Mi04N2NkLWQwOTk2MWM4MDU0YyIgc3RFdnQ6d2hlbj0iMjAyMC0xMS0wNVQxMzoyNzowMS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDoxNjA2OTRhZC0xZDRmLTg5NDMtOGQzMC0zZDBjOGI0MjYyZjEiIHN0RXZ0OndoZW49IjIwMjAtMTEtMDVUMTM6NDc6MzYtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MmZmZGIyZTQtMDVjYS02ZDQ3LWFkYTktMTEzZDJlNWRhNWNjIiBzdEV2dDp3aGVuPSIyMDIxLTEwLTEzVDEzOjQ2OjI5LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+KHy4GAAAAtZJREFUaN7tmj1oFEEUx9dEkwh+oJKAiCKkE4NptbBIMMZAQLCwsPDrGrERG7GIJHZBMbEQIokX0liIlZAIcpUEUVByoIKioIUEbBQUogTD+h+YlWV4s/Nmd3bmDCl+EG4nb/e3t2/mvdmL4jiOVgPRqhOpLX4PzSnwCcTgF5gAe0z/10giLeCVFKA4/z+IbAD1DImESiOL6CSWwB+uTGgRncS0PN4DfnBkQoroJCaVcQfAskkmlAhXgi0TQsRWwiTTF0Ikr0SWzBuRSz5FikokdIMVJcYtXyKuJBJGlThVXyKPGRJ7wWFmvEchRI4wJLpTz/6sId4kEW/Ih8i4ctL7jAS+YiFxD2zzIVJTTnyCMaVeZUrUZf5FIb6RkwaJBdCkxLhBjPsINvpcEI8TK3GXRuLfHU4xrJHYHKJE+QBG5N8Hwe8CEotgZ6iisSX1OK0wJa4T496D9jLL+E2gFwyC3Za1EiUxTox7TYxzJiKScoy4QHHn+pkSzUrMu8S4L2BXWa2uqT29ZkjshVSsGfAZzOeRKCJikuDMTkmsqYw4LIm8IjqJt+AduMiQSNaJOxkSojzfzn1CbEV0ElM5E7sTPCDGiTKmzSZfbUSK9tj1jFlnKxgAh1JTdVSGiAuJZJbrLGOt4oi4khDMyQWxzbeIS4np1OeXfIpwJfYzcuKCcuyhL5EmuWBxeuxhRmL3KsdrPkRaxa6ExUbBGcbsNKL22D5EzoFvlrsdSZE3n252JBXippz2IVJVTvqcEWgd2ALWK59fJiSe+Zp+q46eZ+qb+Ap2+BKhknfAgYS2KSpLZB94QlzIsQISWeVJqdNvl6YlPdqIEqYF8SxxUctyFaeCDWk2Cjp8vHMxlSgVpgx7tyOUiE7mp3wfLrq326ElbMr4CuPVcTAJ28aKI7NUVr/hutUd1Lz7juVuYhCJvJsPYlG7CV6Cp+BF1i8Sgoms/cxpTcQtfwH1u+O6/ucNHwAAAABJRU5ErkJggg==\"","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\" */\n\nimport Tokenizer from './Tokenizer';\nimport turtleMath from './turtleMath';\nimport { includes } from './includes';\nimport { store } from '../../redux/store';\nimport { selectData, clear, add } from '../../redux/reducers/packetDataSlice';\nimport { set } from '../../redux/reducers/projectIdSlice';\n\n//testing redux\nimport {testClear, testSet, selectTestValue} from '../../redux/reducers/testSlice';\nimport { useSelector } from 'react-redux';\n\n// import { error } from 'console';\n\n//built in modulus is weird, so we redefine it to one that works better... negatives, I think, are the main issue\nNumber.prototype.mod = function (n) { return ((this % n) + n) % n; }\n\nlet port, reader, outputStream;\nlet flushtime = 200;\n\nlet constants = {\n pi: 3.141592,\n e: 2.71828,\n}\n\nconst chartPointColors = [\"black\", \"red\", \"blue\", \"yellow\", \"green\", \"teal\", \"purple\", \"orange\"];\n\nexport default class Interpreter {\n\n constructor(props) {\n\n\n this.canvasHidden = false;\n this.store = store;\n\n this.instantiatedObjects = {};\n\n this.lastProc = \"\";\n\n //charts are given assigned variables for data; these are effectively listened for in 'make', so that \n //if the variable in question is one of the chart data ones we know to update the chart data in our app.\n\n this.offsetHorizontal = 0;\n this.updateChartOptions = props.updateChartOptions;\n this.updateChartType = props.updateChartType;\n\n this.turtleScale = 1;\n\n this.singleChartXVariable = [];\n this.topChartXVariable = [];\n this.bottomChartXVariable = [];\n\n this.singleChartYVariable = [];\n this.topChartYVariable = [];\n this.bottomChartYVariable = [];\n\n this.pushNewChartData = props.pushNewChartData;\n\n this.ticker = this.ticker.bind(this);\n this.isDone = this.isDone.bind(this);\n\n this.cnvWidth = 1000;\n this.cnvHeight = 600;\n this.scale = 1;\n this.ctx = document.getElementById('canvas');\n this.xcor = 0;\n this.ycor = 0;\n this.heading = 0;\n this.color = 0;\n this.shade = 50;\n this.colorInHex = null;\n this.opacity = 1;\n this.pendown = true;\n this.pensize = 1;\n this.size = 60;\n this.font = \"sans-serif\";\n this.fontsize = 30;\n this.dpi = 1;\n this.zoom = 1;\n this.snaps = {};\n this.scatterChart = \"\";\n this.colors = [\n 0xFF0000, 0xFF0D00, 0xFF1A00, 0xFF2600, 0xFF3300, 0xFF4000, 0xFF4D00, 0xFF5900, 0xFF6600, 0xFF7300,\n 0xFF8000, 0xFF8C00, 0xFF9900, 0xFFA600, 0xFFB300, 0xFFBF00, 0xFFCC00, 0xFFD900, 0xFFE600, 0xFFF200,\n 0xFFFF00, 0xE6FF00, 0xCCFF00, 0xB3FF00, 0x99FF00, 0x80FF00, 0x66FF00, 0x4DFF00, 0x33FF00, 0x1AFF00,\n 0x00FF00, 0x00FF0D, 0x00FF1A, 0x00FF26, 0x00FF33, 0x00FF40, 0x00FF4D, 0x00FF59, 0x00FF66, 0x00FF73,\n 0x00FF80, 0x00FF8C, 0x00FF99, 0x00FFA6, 0x00FFB3, 0x00FFBF, 0x00FFCC, 0x00FFD9, 0x00FFE6, 0x00FFF2,\n 0x00FFFF, 0x00F2FF, 0x00E6FF, 0x00D9FF, 0x00CCFF, 0x00BFFF, 0x00B3FF, 0x00A6FF, 0x0099FF, 0x008CFF,\n 0x0080FF, 0x0073FF, 0x0066FF, 0x0059FF, 0x004DFF, 0x0040FF, 0x0033FF, 0x0026FF, 0x001AFF, 0x000DFF,\n 0x0000FF, 0x0D00FF, 0x1A00FF, 0x2600FF, 0x3300FF, 0x4000FF, 0x4D00FF, 0x5900FF, 0x6600FF, 0x7300FF,\n 0x8000FF, 0x8C00FF, 0x9900FF, 0xA600FF, 0xB300FF, 0xBF00FF, 0xCC00FF, 0xD900FF, 0xE600FF, 0xF200FF,\n 0xFF00FF, 0xFF00E6, 0xFF00CC, 0xFF00B3, 0xFF0099, 0xFF0080, 0xFF0066, 0xFF004D, 0xFF0033, 0xFF001A,\n 0xFF0000];\n\n\n //procs js\n var t = this;\n\n this.procs = document.getElementById(\"procs\");\n this.terminal = document.getElementById(\"cc\");\n this.prompt = document.getElementById(\"prompt\");\n\n this.procs.onfocus = function () { this.focused = true; };\n this.prompt.onfocus = function () { this.focused = false; t.readProcs(); };\n this.procs.onkeydown = handleKeyDown;\n\n //TODO: this doesn't actually seem to work... is it not applied anywhere?\n function handleKeyDown(e) {\n if (e.ctrlKey) {\n if (e.keyCode == 70) { e.preventDefault(); e.stopPropagation(); this.focus(); }\n if (e.keyCode == 71) { e.preventDefault(); e.stopPropagation(); t.readProcs(); this.runLine('go'); }\n if (e.keyCode == 190) { this.insert('stopped!\\n'); this.reset([]); }\n }\n }\n\n //logo js\n this.evline = [];\n this.cfun = undefined;\n this.arglist = [];\n this.priority = 0;\n this.stack = [];\n this.frame = [];\n this.locals = [{}];\n this.hold = false;\n this.timeout = undefined;\n this.clockspeed = 1;\n\n\n this.respfcn = undefined;\n this.respCount = 0;\n this.resp = [];\n this.respStr = '';\n this.fe = undefined;\n\n\n }\n\n\n\n /*\n *************************************\n * \n * Setup and Turtle\n * \n *************************************\n */\n\n setclass(name) {\n\n switch (name) {\n case \"warrior\":\n document.getElementById('turtleimage').src = 'turtleWarrior.svg'\n return;\n case \"none\":\n document.getElementById('turtleimage').src = 'turtle.svg'\n return;\n\n case \"mage\":\n document.getElementById('turtleimage').src = 'turtleMage.svg'\n return;\n\n case \"bard\":\n document.getElementById('turtleimage').src = 'bard.png'\n return;\n\n case \"ranger\":\n document.getElementById('turtleimage').src = 'turtleRanger.svg'\n return;\n default:\n this.printToConsole(\"Invalid class: expected warrior, mage, ranger, bard or none.\")\n return;\n\n }\n\n\n }\n\n aboutClass(name) {\n\n switch (name) {\n case \"warrior\":\n return `These turtles hail from the seas of the North, where hatchlings hone themselves on sea monsters and protect trade routes. The turtles of Turtlaheim have migrated into the world, seeking fortune and often finding their way as sellswords. Warriors excel at the use of melee weapons and use strength as their primary stat.`\n\n case \"mage\":\n return 'Gifted turtles train in the arcane arts, manipulating energy and the very forces of natural through willpower. These mages seek knowledge of the world and the arcane arts, though some seek power of their own. Mages use intelligence as their primary stat.'\n\n case \"bard\":\n return 'What good are heroic deeds with no voices to sing of them? Bards have devoted themselves to telling the stories of the land and sea. Their magically enhanced songs can embolden allies and strike fear in enemies. Bards focus on charisma as a primary stat.'\n\n case \"ranger\":\n return 'The undersea forests are a place bandits fear to roam, for the rangers are known to dispatch foes silently and unseen. These expert archers have dexterity as a primary stat and excel at the use of bows, crossbows and javalins.'\n default:\n return 'Invalid class: expected warrior, mage, ranger or bard.'\n }\n\n\n }\n\n\n setup() {\n\n\n\n let t = this;\n this.element = document.getElementById('turtle')\n document.getElementById('cnvframe').appendChild(t.element);\n this.img = document.getElementById('turtleimage')\n this.img.onload = imgLoaded;\n var canvas = document.getElementById('canvas');\n this.ctx = canvas.getContext('2d');\n canvas.width = 1000;\n canvas.height = 600;\n\n canvas.style.width = document.getElementById(\"cnvframe\").clientWidth + \"px\";\n canvas.style.height = document.getElementById(\"cnvframe\").clientHeight + \"px\";\n\n t.ctx.textBaseline = \"middle\";\n t.clean();\n window.requestAnimationFrame(this.ticker);\n\n function imgLoaded() {\n t.img.width = t.size;\n t.img.height = t.size;\n t.element.style.width = t.size + 'px';\n t.element.style.height = t.size + 'px';\n t.move();\n }\n\n this.handleResize();\n this.printToConsole(\"Welcome to Logo!\")\n this.printToConsole(`The time is ${Math.floor(Date.now() / 1000)}`)\n\n }\n\n forward(n) {\n const t = this;\n if (t.pendown) {\n t.ctx.beginPath();\n t.ctx.globalAlpha = this.opacity;\n t.ctx.moveTo(t.xcor + t.cnvWidth / 2, t.cnvHeight / 2 - t.ycor);\n }\n t.xcor += n * turtleMath.sindeg(t.heading);\n t.ycor += n * turtleMath.cosdeg(t.heading);\n if (t.pendown) {\n const sx = t.xcor + t.cnvWidth / 2, sy = t.cnvHeight / 2 - t.ycor;\n if (n >= .1) t.ctx.lineTo(sx, sy);\n else t.ctx.lineTo(sx, sy + .1);\n if (t.pensize != 0) t.ctx.stroke();\n if (t.fillpath) t.fillpath.push(function () { t.ctx.lineTo(sx, sy); });\n }\n }\n\n lineto(x, y) {\n const t = this;\n if (t.pendown) {\n t.ctx.beginPath();\n t.ctx.moveTo(t.xcor + t.cnvWidth / 2, t.cnvHeight / 2 - t.ycor);\n }\n t.xcor = x;\n t.ycor = y;\n if (t.pendown) {\n\n var sx = t.xcor + t.cnvWidth / 2, sy = t.cnvHeight / 2 - t.ycor;\n if ((x + y) >= .1) t.ctx.lineTo(sx, sy);\n else t.ctx.lineTo(sx, sy + .1);\n if (t.pensize != 0) t.ctx.stroke();\n if (t.fillpath) {\n t.fillpath.push(function () { t.ctx.lineTo(sx, sy); });\n\n }\n }\n }\n\n setxy(x, y) {\n var t = this;\n t.xcor = x / this.turtleScale;\n t.ycor = y / this.turtleScale;\n var sx = t.xcor + t.cnvWidth / 2, sy = t.cnvHeight / 2 - t.ycor;\n if (t.fillpath) t.fillpath.push(function () { this.ctx.moveTo(sx, sy); });\n }\n\n right(n) { this.seth(this.heading + n); }\n left(n) { this.seth(this.heading - n); }\n\n seth(a) {\n this.heading = a;\n this.heading = (this.heading % 360);\n }\n\n arc(a, r) {\n var t = this;\n if (a == 0) return;\n if (r == 0) { t.seth(t.heading + a); }\n else if (a < 0) leftArc(a, r);\n else rightArc(a, r);\n\n function rightArc(a, r) {\n var sgn = r / Math.abs(r);\n var ar = Math.abs(r);\n var dx = ar * turtleMath.cosdeg(t.heading);\n var dy = ar * turtleMath.sindeg(t.heading);\n var cx = t.xcor + dx;\n var cy = t.ycor - dy;\n if (t.pendown) {\n var sx = t.cnvWidth / 2 + cx, sy = t.cnvHeight / 2 - cy;\n var astart = turtleMath.rad(t.heading + 180.0), aend = turtleMath.rad(t.heading + 180 + a * sgn);\n if ((a % 360) == 0) aend += .0001;\n var dir = r < 0;\n t.ctx.globalAlpha = t.opacity;\n t.ctx.beginPath();\n t.ctx.moveTo(t.xcor + t.cnvWidth / 2, t.cnvHeight / 2 - t.ycor);\n t.ctx.arc(sx, sy, ar, astart, aend, dir);\n if (t.pensize != 0) t.ctx.stroke();\n if (t.fillpath) t.fillpath.push(function () { t.ctx.arc(sx, sy, ar, astart, aend, dir); });\n }\n t.seth(t.heading + a * sgn);\n t.xcor = cx - ar * turtleMath.cosdeg(t.heading);\n t.ycor = cy + ar * turtleMath.sindeg(t.heading);\n }\n\n function leftArc(a, r) {\n var sgn = r / Math.abs(r);\n var ar = Math.abs(r);\n var dx = ar * turtleMath.cosdeg(t.heading);\n var dy = ar * turtleMath.sindeg(t.heading);\n var cx = t.xcor - dx;\n var cy = t.ycor + dy;\n if (t.pendown) {\n var sx = t.cnvWidth / 2 + cx, sy = t.cnvHeight / 2 - cy;\n var astart = turtleMath.rad(t.heading), aend = turtleMath.rad(t.heading + a * sgn);\n var dir = r >= 0;\n if ((a % 360) == 0) aend += .0001;\n t.ctx.beginPath();\n t.ctx.moveTo(t.xcor + t.cnvWidth / 2, t.cnvHeight / 2 - t.ycor);\n t.ctx.arc(sx, sy, ar, astart, aend, dir);\n if (t.pensize != 0) t.ctx.stroke();\n if (t.fillpath) t.fillpath.push(function () { t.ctx.arc(sx, sy, ar, astart, aend, dir); });\n }\n t.seth(t.heading + a * sgn);\n t.xcor = cx + ar * turtleMath.cosdeg(t.heading);\n t.ycor = cy - ar * turtleMath.sindeg(t.heading);\n }\n }\n\n showTurtle() { this.element.style.visibility = 'visible'; }\n hideTurtle() { this.element.style.visibility = 'hidden'; }\n\n fillscreen(c, s) {\n\n if ((typeof c) == 'object') c = c[0];\n this.setCtxColorShade(c, s);\n this.ctx.fillRect(0, 0, this.cnvWidth, this.cnvHeight);\n this.setCtxColorShade(this.color, this.shade);\n }\n\n setcolor(c) {\n\n if (typeof c == 'string') {\n this.setCtxColorCSS(c);\n return;\n }\n\n if ((typeof c) == 'object') { this.color = c[0]; this.shade = c[1]; }\n else this.color = c;\n\n this.setCtxColorShade(this.color, this.shade);\n }\n\n setshade(sh) {\n this.shade = sh;\n this.setCtxColorShade(this.color, this.shade);\n }\n\n setpensize(ps) {\n this.pensize = ps;\n this.ctx.lineWidth = Math.abs(this.pensize);\n }\n\n startfill() {\n var t = this;\n this.fillpath = [];\n var sx = this.xcor + this.cnvWidth / 2, sy = this.cnvHeight / 2 - this.ycor;\n this.fillpath.push(function () { t.ctx.moveTo(sx, sy); });\n }\n\n endfill() {\n if (!this.fillpath) return\n this.ctx.beginPath();\n for (var i in this.fillpath) {\n if (i > 2000) break;\n this.fillpath[i]();\n }\n this.ctx.globalAlpha = this.opacity;\n this.ctx.fill();\n this.ctx.globalAlpha = 1;\n this.fillpath = undefined;\n }\n\n setlinedash(l) {\n this.ctx.setLineDash(l);\n }\n\n\n /*\n *************************************\n * \n * Instantiated Objects\n * \n *************************************\n */\n\n //add an image to the canvas - mostly works, but needs to be positioned and added to the records (this.instantiatedObjects)\n //Note that turtle position is handled largely by 'move'. So we should add a 'target' argument to move; assume turtle if not specified,\n //otherwise select the object in the array and move it.\n\n\n\n _test(){\n // Access the Redux state directly\n const state = this.store.getState();\n const testValue = selectTestValue(state);\n\n // Dispatch an action\n this.store.dispatch(testSet(\"test\"));\n\n // Access the updated state\n const updatedState = this.store.getState();\n const updatedTestValue = selectTestValue(updatedState);\n }\n\n\n\n //TODO: The entire 'move' paradigm uses offsets, which is confusing when absolute can work with top/left, since we know the pixel count here.\n createInstantiatedObject(name, imageLocation, coordinates) {\n let t = this;\n let width = 60;\n let height = 60;\n var canvas = document.getElementById(\"canvas\");\n\n t.instantiatedObjects[name] = {\n xpos: coordinates[0],\n ypos: coordinates[1]\n }\n\n let objectElement = document.createElement('div');\n objectElement.setAttribute('id', `${name}-div`);\n objectElement.setAttribute('class', 'object');\n let styles = {\n height: \"60px\",\n width: \"60px\",\n position: \"absolute\",\n top: (-height / 2 + (t.cnvHeight / 2 - coordinates[1]) * canvas.offsetHeight / t.cnvHeight) + 'px',\n left: (-width / 2 + (coordinates[0] + t.cnvWidth / 2) * canvas.offsetWidth / t.cnvWidth) + 'px'\n }\n\n Object.assign(objectElement.style, styles);\n\n document.getElementById('cnvframe').appendChild(objectElement);\n let img = document.createElement('img');\n img.id = name;\n img.src = imageLocation;\n img.height = 60;\n img.width = 60;\n\n objectElement.appendChild(img);\n }\n\n deleteInsantiatedObject(name) {\n if (this.instantiatedObjects[name] && document.getElementById(`${name}-div`) != null) {\n delete this.instantiatedObjects[name];\n document.getElementById(`${name}-div`).remove();\n }\n }\n\n moveInsantiatedObject(name, x, y) {\n let height = 60;\n let width = 60;\n\n var canvas = document.getElementById(\"canvas\");\n if (document.getElementById(`${name}-div`) !== null) {\n document.getElementById(`${name}-div`).style.top = (-height / 2 + (this.cnvHeight / 2 - y) * canvas.offsetHeight / this.cnvHeight) + 'px';\n document.getElementById(`${name}-div`).style.left = (-width / 2 + (x + this.cnvWidth / 2) * canvas.offsetWidth / this.cnvWidth) + 'px';\n } else {\n this.printToConsole('Error: Object is not defined')\n }\n }\n\n\n /*\n *************************************\n * \n * Plotting / Graphs\n * \n *************************************\n */\n\n\n setChartListener(axis, variable) {\n\n var t = this;\n\n //variable can be passed as a string or array; we want to treat it as an array\n //so that we can accept multiple data sources\n\n if (!Array.isArray(variable)) {\n variable = [variable.replace(/'|\"/g, '')];\n }\n\n //Logo has a peculiarity where array contents are not evaluated, so we have to replace the quotes that \n //come around strings directly\n\n const listenerVariables = variable.map(x => x.replace(/'|\"/g, ''));\n\n\n\n\n if (t.getValue(\"_chartType\")) {\n if (axis == \"x\") {\n //if axis is x, figure out which chart this is\n if (t.getValue(\"_chartType\") == \"single\") {\n t.singleChartXVariable = listenerVariables;\n }\n if (t.getValue(\"_chartType\") == \"bottom\") {\n t.bottomChartXVariable = listenerVariables;\n }\n if (t.getValue(\"_chartType\") == \"top\") {\n t.topChartXVariable = listenerVariables;\n }\n } else {\n //if axis isn't x, we assume it's y and check which chart this is \n if (t.getValue(\"_chartType\") == \"single\") {\n t.singleChartYVariable = listenerVariables;\n }\n if (t.getValue(\"_chartType\") == \"top\") {\n t.topChartYVariable = listenerVariables;\n\n }\n if (t.getValue(\"_chartType\") == \"bottom\") {\n t.bottomChartYVariable = listenerVariables;\n }\n }\n\n } else {\n throw \"Chart not defined\";\n }\n\n\n }\n\n\n clearPlot() {\n //clears plot\n this.updateChartType(null);\n //clears data associated with plot\n this.store.dispatch(clear())\n //reset all the chart options\n this.setValue(\"_range\", null)\n this.setValue(\"_xLabel\", null)\n this.setValue(\"_yLabel\", null)\n this.setValue(\"_plotTitle\", null)\n this.setValue(\"_xTickSteps\", null)\n this.setValue(\"_yTickSteps\", null)\n this.setValue(\"_domain\", null)\n }\n\n\n initPlot() {\n\n //we use Chart.js for all of this, so follow their docs for the shape of the options object\n var chartOptions = {\n title: {\n display: true,\n text: \"\"\n },\n scales: {\n yAxes: [{\n scaleLabel: {\n display: true,\n labelString: \"\"\n },\n ticks: {}\n }],\n\n xAxes: [{\n scaleLabel: {\n display: true,\n labelString: \"\"\n },\n ticks: {}\n }]\n },\n legend: {\n display: false\n },\n responsive: true,\n maintainAspectRatio: false,\n animation: {\n duration: 0\n },\n elements: {\n point: {\n radius: 3,\n backgroundColor: \"black\"\n }\n }\n };\n\n\n //Get plot type - used to define which chart we're working with\n var chartType = (this.getValueInternal(\"_chartType\"));\n\n //get options and create an object we can read on the other side\n if (this.getValueInternal(\"_xLabel\")) {\n chartOptions.scales.xAxes[0].scaleLabel.labelString = this.getValueInternal(\"_xLabel\");\n }\n\n if (this.getValueInternal(\"_plotTitle\")) {\n chartOptions.title.text = this.getValueInternal(\"_plotTitle\");\n } else {\n chartOptions.title.text = \"\"\n }\n\n\n if (this.getValueInternal(\"_yLabel\")) {\n chartOptions.scales.yAxes[0].scaleLabel.labelString = (this.getValueInternal(\"_yLabel\"));\n }\n\n var rangeSetting = this.getValueInternal(\"_range\");\n\n if (rangeSetting && Array.isArray(rangeSetting) && rangeSetting.length >= 2) {\n chartOptions.scales.yAxes[0].ticks[\"min\"] = rangeSetting[0];\n chartOptions.scales.yAxes[0].ticks[\"max\"] = rangeSetting[1];\n }\n\n var domainSetting = this.getValueInternal(\"_domain\");\n\n if (domainSetting && Array.isArray(domainSetting) && domainSetting.length >= 2) {\n chartOptions.scales.xAxes[0].ticks[\"min\"] = domainSetting[0];\n chartOptions.scales.xAxes[0].ticks[\"max\"] = domainSetting[1];\n }\n\n\n if (this.getValueInternal(\"_xTickSteps\")) {\n chartOptions.scales.xAxes[0].ticks[\"stepSize\"] = this.getValueInternal(\"_xTickSteps\");\n }\n\n if (this.getValueInternal(\"_yTickSteps\")) {\n chartOptions.scales.yAxes[0].ticks[\"stepSize\"] = this.getValueInternal(\"_xTickSteps\");\n }\n\n //update view based on plot type; we know that top and bottom means double view\n if (chartType == \"single\") {\n this.updateChartType(\"single\");\n this.updateChartOptions(\"single\", chartOptions);\n\n }\n\n else if (chartType == \"top\" || chartType == \"bottom\") {\n this.updateChartType(\"double\");\n if (chartType == \"top\") {\n this.updateChartOptions(\"top\", chartOptions);\n } else {\n this.updateChartOptions(\"bottom\", chartOptions);\n }\n\n this.setValue(\"_range\", null)\n this.setValue(\"_xLabel\", null)\n this.setValue(\"_yLabel\", null)\n this.setValue(\"_plotTitle\", null)\n this.setValue(\"_xTickSteps\", null)\n this.setValue(\"_yTickSteps\", null)\n this.setValue(\"_domain\", null)\n chartOptions = {};\n } \n\n this.updateChartData(chartType);\n\n }\n\n\n //TODO: This may be redundant; functions are now contained in terminal.js\n handleCCKeyDown(e) {\n var k = e.keyCode;\n if (k == 13) {\n if (e.shiftKey) this.insertcr(e);\n else this.handlecr(e);\n }\n if (e.ctrlKey) {\n if (e.keyCode == 70) { e.preventDefault(); e.stopPropagation(); }\n if (e.keyCode == 71) { e.preventDefault(); e.stopPropagation(); this.runLine('go'); }\n if (e.keyCode == 190) { this.insert('stopped!\\n'); this.reset([]); }\n }\n }\n\n handlecr(e) {\n var pos = document.getElementById('cc').selectionStart;\n var t = document.getElementById('cc').value;\n var start = t.lastIndexOf('\\n', pos - 1), end = t.indexOf('\\n', pos);\n if (end < 0) end = t.length;\n document.getElementById('cc').selectionStart = end + 1;\n if (end != t.length) e.preventDefault();\n var str = t.substring(start + 1, end);\n this.runLine(str);\n }\n\n insertcr(e) {\n e.preventDefault();\n var pos = document.getElementById('cc').selectionStart;\n var t = document.getElementById('cc').value;\n var before = t.substring(0, pos);\n var after = t.substring(pos);\n document.getElementById('cc').value = before + '\\n' + after;\n document.getElementById('cc').selectionStart = pos + 1;\n document.getElementById('cc').selectionEnd = pos + 1;\n }\n\n\n /////////////////////////\n //\n // Text\n //\n /////////////////////////\n\n drawString(str) {\n\n if(this.pendown == false) return; //Don't draw text if the pen is up\n\n //List of bad words to filter out\n let badWords = ['dick', 'God damn', 'damn it', 'dammit', 'sisterfuck', 'fucking', 'sibling fucker', 'father fucker', 'dick head', 'fucker', 'dick', 'dickhead', 'cunt', 'crap', 'prick', 'horseshit', 'dumbass', 'jackass', 'fucking', 'wanker', 'arse', 'arsehead', 'arsehole', 'ass', 'ass hole', 'asshole', 'bastard', 'bitch', 'bloody', 'bollocks', 'brotherfucker', 'bugger', 'bullshit', 'child fucker', 'Christ on a bike', 'Christ on a cracker', 'cock', 'cocksucker', 'crap', 'cunt', 'dammit', 'damn', 'damned', 'damn it', 'dick', 'dick head', 'dickhead', 'dumb ass', 'dumb ass', 'dumbass', 'dyke', 'father fucker', 'fatherfucker', 'frigger', 'fuck', 'fucker', 'fucking', 'god dammit', 'god damn', 'goddammit', 'God damn', 'goddamn', 'Goddamn', 'goddamned', 'goddamnit', 'godsdamn', 'hell', 'holy shit', 'horseshit', 'in shit', 'jack ass', 'jackarse', 'jackass', 'Jesus Christ', 'Jesus fuck', 'Jesus H. Christ', 'Jesus Harold Christ', 'Jesus, Mary and Joseph', 'Jesus wept', 'kike', 'mother fucker', 'mother fucker', 'motherfucker', 'nigga', 'nigra', 'pigfucker', 'piss', 'prick', 'pussy', 'shit', 'shit ass', 'shite', 'sibling fucker', 'sisterfuck', 'sisterfucker', 'slut', 'son of a whore', 'son of a bitch', 'spastic', 'sweet Jesus', 'twat', 'wanker']\n\n //If bad word is used in draw text, exit and throw and error to \n if (badWords.some(word => str.toLowerCase().includes(word))) {\n this.printToConsole(\"Error: Invalid word in string.\")\n return;\n }\n\n var t = this;\n t.ctx.save();\n this.ctx.translate(t.xcor + t.cnvWidth / 2, t.cnvHeight / 2 - t.ycor);\n t.ctx.rotate(turtleMath.rad(t.heading));\n t.ctx.fillText(str, 0, 0);\n t.ctx.restore();\n }\n\n\n setfont(f) {\n this.font = f;\n this.ctx.font = this.fontsize + 'px ' + f;\n }\n\n setfontsize(s) {\n this.fontsize = s;\n this.ctx.font = s + 'px ' + this.font;\n }\n\n\n /////////////////////////\n //\n // Basic stuff\n //\n /////////////////////////\n\n move() {\n\n var canvas = document.getElementById(\"canvas\");\n if (canvas == null) return;\n\n if (!this.img.complete) return;\n var img = this.element.firstChild;\n\n var dx = -img.width / 2 + (this.xcor + this.cnvWidth / 2) * canvas.offsetWidth / this.cnvWidth;\n var dy = -img.height / 2 + (this.cnvHeight / 2 - this.ycor) * canvas.offsetHeight / this.cnvHeight;\n //var s = 1;\n var s = canvas.offsetHeight / this.cnvHeight * this.zoom;\n\n this.element.style.transform = `translate(${dx}px, ${dy}px) rotate(${this.heading}deg) scale(${s}, ${s})`;\n\n this.element.left = dx;\n this.element.top = dy;\n\n if (this.ycor > (this.cnvHeight / 2) || this.ycor < ((this.cnvHeight / 2) * -1) || this.xcor > (this.cnvWidth / 2) || this.xcor < ((this.cnvWidth / 2) * -1)) {\n this.element.style.visibility = \"hidden\";\n this.outOfBounds = true;\n } else {\n if (this.outOfBounds == true) {\n this.element.style.visibility = \"visible\";\n this.outOfBounds = false;\n }\n }\n }\n\n toggleCanvas() {\n if (this.canvasHidden) {\n this.showCanvas();\n } else {\n this.hideCanvas();\n }\n }\n\n hideCanvas() {\n document.getElementById('terminal-wrapper').style.height = 'var(--interfaceHeight)';\n this.canvasHidden = true;\n }\n\n showCanvas() {\n this.canvasHidden = false;\n document.getElementById(\"terminal-wrapper\").style.width = `calc(var(--chartWidth) - ${this.offsetHorizontal}px)`\n document.getElementById(\"terminal-wrapper\").style.height = `calc(var(--interfaceHeight) - var(--chartHeight) + ${this.offsetHorizontal * (3 / 5)}px)`\n }\n\n handleResizeHorizontal(offset) {\n\n\n this.offsetHorizontal = offset;\n\n document.getElementById(\"codeEntryDiv\").style.width = `calc(var(--codeEntryWidth) - var(--gutterWidth) + ${this.offsetHorizontal}px)`\n document.getElementById(\"gutter\").style.left = `calc(var(--codeEntryWidth) - var(--gutterWidth) + ${this.offsetHorizontal}px)`;\n document.getElementById(\"view-tabs\").style.left = `calc(var(--codeEntryWidth) + var(--gutterWidth) + ${this.offsetHorizontal}px)`;\n\n if(!this.canvasHidden){\n document.getElementById(\"chartAreaWrapper\").style.width = `calc(var(--chartWidth) - ${this.offsetHorizontal}px)`\n document.getElementById(\"chartAreaWrapper\").style.height = `calc(var(--chartHeight) - ${this.offsetHorizontal * (3 / 5)}px)`\n document.getElementById(\"terminal-wrapper\").style.width = `calc(var(--chartWidth) - ${this.offsetHorizontal}px)`\n document.getElementById(\"terminal-wrapper\").style.height = `calc(var(--interfaceHeight) - var(--chartHeight) + ${this.offsetHorizontal * (3 / 5)}px)`\n }\n\n else {\n document.getElementById(\"chartAreaWrapper\").style.width = `calc(var(--chartWidth) - ${this.offsetHorizontal}px)`\n document.getElementById(\"chartAreaWrapper\").style.height = `calc(var(--chartHeight) - ${this.offsetHorizontal * (3 / 5)}px)`\n document.getElementById(\"terminal-wrapper\").style.width = `calc(var(--chartWidth) - ${this.offsetHorizontal}px)`\n }\n\n\n this.handleResize();\n\n }\n\n handleResize() {\n\n\n var newScale;\n var canvas = document.getElementById(\"canvas\");\n var wrapper = document.getElementById(\"chartAreaWrapper\");\n\n var heightScale = 600 / (wrapper.offsetHeight - 5);\n newScale = Math.floor(heightScale * 1000) / 1000;\n\n this.turtleScale = newScale;\n\n canvas.style.width = (wrapper.offsetWidth - 5) + \"px\";\n canvas.style.height = (wrapper.offsetHeight - 5) + \"px\";\n // document.getElementById(\"canvasDimensionsLabel\").innerHTML = `Canvas: ${Math.floor((wrapper.offsetWidth - 5) * newScale)}w x ${Math.floor((wrapper.offsetHeight - 5) * newScale)}h`\n\n this.move();\n }\n\n\n\n\n\n clean() {\n var t = this;\n this.xcor = 0;\n t.ycor = 0;\n t.heading = 0;\n t.ctx.globalAlpha = 1;\n t.setCtxColorShade(-9999, 98); // #FAFAFA\n t.ctx.fillRect(0, 0, t.cnvWidth, t.cnvHeight);\n t.color = 0;\n t.shade = 50;\n t.setCtxColorShade(t.color, t.shade);\n t.pensize = 4;\n t.ctx.lineWidth = t.pensize;\n t.opacity = 1;\n t.pendown = true;\n t.fillpath = undefined;\n t.ctx.lineCap = 'round';\n t.ctx.lineJoin = 'round';\n t.font = 'sans-serif';\n t.fontsize = 30;\n t.ctx.font = '30px sans-serif';\n t.ctx.textAlign = 'center';\n t.ctx.setLineDash([]);\n t.showTurtle();\n }\n\n //Random\n\n oneof(a, b) {\n return this.nextRandomDouble() < .5 ? a : b;\n }\n\n getRandom(value) {\n //if the input is an array, we want a range; if it's a number, we assume the lower limit is 0\n\n if (Array.isArray(value) && value.length >= 2) {\n return Math.floor(Math.random() * (value[1] - value[0] + 1)) + value[0];\n } else {\n return Math.floor(Math.random() * (value + 1));\n }\n }\n\n\n\n //load a background\n\n loadBackgroundImage(url) {\n\n const context = this;\n context.hold = true;\n var c = document.getElementById(\"canvas\");\n var ctx = c.getContext(\"2d\");\n var img = new Image();\n img.src = url;\n var widthTarget = 1000;\n img.onload = function () {\n ctx.drawImage(img, 0, 0, widthTarget, widthTarget * img.height / img.width);\n context.hold = false;\n };\n\n img.onerror = function () {\n context.printToConsole(\"Error loading image\");\n context.hold = false;\n }\n\n\n }\n\n\n /////////////////////////\n //\n // loader\n //\n /////////////////////////\n\n loadimg(dataurl, fcn) {\n var t = this;\n var ctx = this.ctx;\n var img = new Image();\n img.onload = drawImageToFit;\n img.src = dataurl;\n\n function drawImageToFit() {\n var s = t.cnvWidth / img.naturalWidth;\n ctx.save();\n ctx.scale(s, s);\n ctx.drawImage(img, 0, 0);\n ctx.restore();\n if (fcn) fcn();\n }\n }\n\n\n /////////////////////////\n //\n // Low Level\n //\n /////////////////////////\n\n setCtxColorShade(color, shade) {\n var t = this;\n setCtxColor(mergeColorShade(color, shade));\n\n function mergeColorShade(color, shade) {\n var sh = Math.abs(shade.mod(200));\n if (sh > 100) sh = 200 - sh;\n if (color == -9999) return blend(0x000000, 0xffffff, sh / 100);\n var c = colorFromNumber(color);\n if (sh == 50) return c;\n else if (sh < 50) return blend(c, 0x000000, (50 - sh) / 60);\n else return blend(c, 0xffffff, (sh - 50) / 53);\n }\n\n function colorFromNumber(c) {\n var mc = c.mod(100);\n var ic = Math.floor(mc);\n var fract = mc - ic;\n return blend(t.colors[ic], t.colors[ic + 1], fract);\n }\n\n function blend(a, b, s) {\n var ar = (a >> 16) & 0xff, ag = (a >> 8) & 0xff, ab = a & 0xff;\n var br = (b >> 16) & 0xff, bg = (b >> 8) & 0xff, bb = b & 0xff;\n var rr = Math.round(ar * (1 - s) + br * s);\n var rg = Math.round(ag * (1 - s) + bg * s);\n var rb = Math.round(ab * (1 - s) + bb * s);\n return (rr << 16) + (rg << 8) + rb;\n }\n\n function setCtxColor(c) {\n var cc = '#' + (c + 0x1000000).toString(16).substring(1);\n t.ctx.strokeStyle = cc;\n t.ctx.fillStyle = cc;\n }\n\n }\n\n setCtxColorCSS(color) {\n this.ctx.strokeStyle = color;\n this.ctx.fillStyle = color;\n }\n\n parse(s) { return new Tokenizer(s).tokenize(); }\n\n //procs js\n readProcs() {\n var procs = document.getElementById(\"procs\").value;\n var toBeEvaluated = procs + \"\\n\" + includes;\n this.procString(toBeEvaluated, 'normal');\n }\n\n\n procString(str, type) {\n gatherSource(this);\n parseProcs(this);\n\n function gatherSource(context) {\n\n var thisproc = undefined;\n for (var i in prims) if ((prims[i].type) == 'normal') delete prims[i];\n var lines = str.split('\\n');\n for (var j = 0; j < lines.length; j++) procLines(lines[j]);\n\n function procLines(l) {\n var sl = Tokenizer.parse(l);\n if ((sl[0] == 'to') && (sl[1] != undefined)) {\n thisproc = sl[1];\n \n //Check if a Word with the name already exists, if so throw an error and write to console\n if(prims[thisproc] != undefined && thisproc != 'readLightSensor'){\n context.printToConsole(\"Error: A Word with the name \" + thisproc + \" already exists. Please choose a different name.\");\n prims[thisproc] = { nargs: sl.length - 2, fcn: '', inputs: sl.slice(2), type: 'normal', error: true};\n return;\n }\n\n prims[thisproc] = { nargs: sl.length - 2 };\n prims[thisproc].fcn = '';\n prims[thisproc].inputs = sl.slice(2);\n prims[thisproc].type = type;\n return;\n }\n else if (sl[0] == 'end') { thisproc = undefined; return; }\n if (thisproc == undefined) return;\n if (prims[thisproc].error) return; //skip lines of Words that were declared with the same name as an existing Word\n prims[thisproc].fcn += (l + '\\n');\n }\n }\n\n function parseProcs(context) {\n for (var p in prims) {\n var prim = prims[p];\n var fcn = prim.fcn;\n if ((typeof fcn) != 'string') continue;\n\n if (prim.parsed) continue;\n prim.parsed = Tokenizer.parse(fcn);\n\n for (var i in prim.inputs) {\n //Check if a number is being used as a variable name, if so throw an error and write to console\n if (!isNaN(prim.inputs[i])) {\n context.printToConsole(\"Error: A number is used as a variable name in the following word: \" + p + \"\");\n throw \"Error: Cannot use a number as a variable name\";\n }\n\n if (prim.inputs[i].substring(0, 1) == ':') prim.inputs[i] = prim.inputs[i].substring(1);\n }\n }\n }\n }\n\n\n\n\n //Ticker is the main loop - it continuously runs and updates movement, evaluating as it goes. Similar to frame updates in game frameworks.\n //'Hold' freezes evaluation and shows up in other functions; move is turtle specific.\n\n ticker() {\n if (!this.isDone()) {\n var end = this.now() + flushtime;\n while (this.now() < end) {\n if (this.hold) break;\n if (this.isDone()) break;\n this.evalNext();\n }\n this.move();\n }\n window.requestAnimationFrame(this.ticker);\n\n }\n\n\n //logo js\n reset(l) {\n this.evline = l;\n this.cfun = undefined;\n this.arglist = [];\n this.priority = 0;\n this.stack = [];\n this.frame = [];\n\n this.locals = [this.last(this.locals)];\n\n this.hold = false;\n if (this.timeout != undefined) clearTimeout(this.timeout);\n this.timeout = undefined;\n }\n\n printToConsole(x) {\n if (Array.isArray(x)) {\n var stringHolder = \"\";\n for (var value of x) {\n stringHolder += ` ${value}`;\n }\n x = stringHolder;\n }\n\n const terminal = document.getElementById(\"terminalData\");\n if (terminal !== null) {\n let entry = `${x}`\n terminal.innerHTML += entry;\n terminal.innerHTML += this.lastProc;\n terminal.scrollTop = document.getElementById(\"terminalData\").scrollHeight;\n\n const cc = document.getElementById(\"cc\");\n if (cc !== null) {\n cc.value = cc.value + x + \"\\n\";\n cc.scrollTop = cc.scrollHeight;\n }\n }\n\n }\n\n cleanConsole() {\n document.getElementById(\"terminalData\").innerHTML = \"\";\n }\n\n evalNext() {\n const t = this;\n \n try {\n if (t.cfun) {\n if (t.arglist.length == prims[t.cfun].nargs) { funcall(); return; }\n if ((prims[t.cfun].nargs == 'ipm') && (t.evline[0] == ')')) { t.evline.shift(); funcall(); return }\n }\n if (t.evline.length == 0) {\n if (t.cfun == undefined) t.evalEOL();\n else throw 'Error: not enough inputs to ' + t.cfun; \n return;\n }\n var token = t.evline.shift();\n if ((typeof token) == 'string') evalString();\n else t.pushResult(token);\n }\n catch (e) {\n this.printToConsole(e);\n t.stack = [];\n t.evline = [];\n }\n\n\n function evalString() {\n\n if (token.substring(0, 1) == ':') {\n t.pushResult(t.getValue(token.substring(1)));\n }\n else if (token.substring(0, 1) == '\"') t.pushResult(token.substring(1));\n else if ((token.substring(0, 1) == \"'\") && (token.slice(-1) == \"'\")) t.pushResult(token.substring(1, token.length - 1));\n else if (constants[token]) t.pushResult(constants[token]);\n\n /*\n\n TODO: The following commented code allows JSLogo to function without using : and \" before variables. It also allow implicit delcaration\n of the form x = 5. These would be a huge asset to the program, but it was requested that we not allow the functionality. So it's sitting here,\n commented out.\n\n\n //no type declaration, no value, no current function, but followed by = - implicit declaration\n\n \n\n else if (!t.cfun && t.evline[0] === `=` && t.evline[1] != undefined) {\n\n //not sure if undefined works to catch errors here\n\n //for an implicit variable definition, make the variable and delete the relevant values from evline\n //note: implicit declarations can't be used with \"name or :name, so there's an inconsistency with legacy logo here\n\n t.stack.push(t.cfun);\n t.stack.push(t.arglist);\n t.stack.push(t.priority);\n\n t.cfun = \"let\";\n t.arglist = [token];\n t.evline.shift()\n\n\n }\n\n\n\n //If no declaration, but value exists as a variable, get that value. \n else if (t.getValueInternal(token)) {\n t.pushResult(t.getValue(token));\n }\n */\n\n else {\n\n if (token == '(') handleParend();\n\n if (prims[token] == undefined) {\n throw \"error: I don't know how to \" + token;\n }\n\n //attempting to catch the case \"make x se 5 6\"; see above\n if (t.cfun == \"make\" || t.cfun == \"var\" || t.cfun == \"let\") {\n }\n\n t.stack.push(t.cfun);\n t.stack.push(t.arglist);\n t.stack.push(t.priority);\n t.cfun = token;\n t.arglist = [];\n t.priority = 0;\n }\n\n function handleParend() {\n\n if (t.evline[0] == 'se') { t.evline.shift(); token = 'se '; }\n else token = '( ';\n }\n }\n\n\n\n function funcall() {\n if (prims[t.cfun].flow) prims[t.cfun].fcn.apply(t, t.arglist);\n else if ((typeof prims[t.cfun].fcn) == 'function') primCall();\n else if ((typeof prims[t.cfun].fcn) == 'string') procCall();\n }\n\n\n function primCall() {\n var arglist = t.arglist;\n var prim = t.cfun;\n var res = prims[t.cfun].fcn.apply(t, arglist);\n t.priority = t.stack.pop();\n t.arglist = t.stack.pop();\n t.cfun = t.stack.pop();\n if ((res == undefined) && (t.cfun != undefined)) throw \"error:\" + prim + \" didn't output to \" + t.cfun;\n t.pushResult(res);\n }\n\n function procCall() {\n var cfun = t.cfun, arglist = t.arglist;\n t.stack.push(t.evline);\n t.stack.push(t.frame);\n t.frame = [].concat(t.stack);\n bindArgs();\n t.evalLine(prims[cfun].parsed, t.procOutput);\n\n function bindArgs() {\n var bindings = {};\n var inputs = prims[cfun].inputs;\n for (var i in inputs) bindings[inputs[i]] = arglist[i];\n t.locals.unshift(bindings);\n }\n }\n }\n\n pushResult(res) {\n var t = this;\n if (res == undefined) return;\n if (t.cfun == undefined) throw \"warning: you don't say what to do with \" + t.printstr(res);\n if (isInfixNext()) infixCall(res);\n else t.arglist.push(res);\n\n function infixCall(arg) {\n t.stack.push(t.cfun);\n t.stack.push(t.arglist);\n t.stack.push(t.priority);\n t.cfun = t.evline.shift();\n t.arglist = [arg];\n t.priority = prims[t.cfun].priority;\n }\n\n function isInfixNext() {\n if (t.evline.length == 0) return false;\n var token = t.evline[0];\n if (prims[token] == undefined) return false;\n if (prims[token].priority == undefined) return false;\n return (prims[token].priority < t.priority);\n }\n }\n\n isDefined(name) {\n if (this.getValueInternal(name)) {\n return true;\n } else {\n return false;\n }\n }\n\n getValue(name) {\n\n for (var i in this.locals) {\n if (this.locals[i][name] != undefined) return this.locals[i][name];\n }\n\n throw 'warning: ' + name + ' has no value';\n }\n\n\n\n //unlike the Logo version, this returns false if values do not exist\n //seems redundant but... here we are. \n getValueInternal(name) {\n\n for (var i in this.locals) {\n if (this.locals[i][name] != undefined) {\n return this.locals[i][name];\n }\n }\n return false;\n }\n\n\n setValue(name, value) {\n\n var updateChart = false;\n var t = this;\n var chartType = [];\n\n if (this.singleChartXVariable.includes(name) || this.singleChartYVariable.includes(name)) {\n updateChart = true;\n chartType.push(\"single\");\n }\n\n if (this.topChartXVariable.includes(name) || this.topChartYVariable.includes(name)) {\n updateChart = true;\n chartType.push(\"top\");\n }\n\n if (this.bottomChartXVariable.includes(name) || this.bottomChartYVariable.includes(name)) {\n updateChart = true;\n chartType.push(\"bottom\");\n }\n\n\n\n for (var i in t.locals) {\n if (t.locals[i][name] != undefined) {\n t.locals[i][name] = value;\n if (updateChart) {\n for (var type of chartType) {\n this.updateChartData(type);\n }\n\n }\n return;\n }\n }\n t.locals[t.locals.length - 1][name] = value;\n\n if (updateChart) {\n for (var types of chartType) {\n this.updateChartData(types);\n }\n }\n }\n\n\n setLocalValue(name, value) {\n var t = this;\n if (t.locals[0][name] != undefined) {\n t.locals[0][name] = value;\n return;\n }\n\n t.locals[0][name] = value;\n return;\n }\n\n makeLocal(name) { this.locals[0][name] = 0; }\n\n\n\n updateChartData(chartType) {\n var t = this;\n var chartData = [];\n var xDataArray = [];\n var yDataArray = [];\n\n //each listener variable holds an array of source variables, not the values themselves; so we get the values here\n\n //TODO: Add typechecking; we need valid arrays for this to work\n\n switch (chartType) {\n case 'single':\n for (let variable of this.singleChartXVariable) {\n xDataArray.push(t.getValueInternal(variable));\n }\n\n for (let variable of this.singleChartYVariable) {\n yDataArray.push(t.getValueInternal(variable))\n }\n break;\n\n case 'top':\n for (let variable of this.topChartXVariable) {\n xDataArray.push(t.getValueInternal(variable));\n }\n\n for (let variable of this.topChartYVariable) {\n yDataArray.push(t.getValueInternal(variable))\n }\n break;\n\n case 'bottom':\n for (let variable of this.bottomChartXVariable) {\n xDataArray.push(t.getValueInternal(variable));\n }\n\n for (let variable of this.bottomChartYVariable) {\n yDataArray.push(t.getValueInternal(variable))\n }\n break;\n\n default:\n xDataArray = [];\n yDataArray = [];\n break;\n }\n\n //if xDataArray has one value but yDataArray has more, force xDataArray to the same length by repeating\n if (xDataArray.length == 1 && yDataArray.length > 1) {\n for (let i = 0; i < yDataArray.length - 1; i++) {\n xDataArray.push(xDataArray[0]);\n }\n }\n\n //if yDataArray has one value but xDataArray has more, force yDataArray to the same length by repeating\n if (yDataArray.length == 1 && xDataArray.length > 1) {\n for (let i = 0; i < xDataArray.length - 1; i++) {\n yDataArray.push(yDataArray[0]);\n }\n\n }\n\n\n if (xDataArray && yDataArray) {\n\n for (let varCount in xDataArray) {\n\n let dataHolder = [];\n\n for (let count = 0; count <= xDataArray[varCount].length; count++) {\n if (typeof yDataArray[varCount] && yDataArray[varCount][count] !== 'undefined') {\n dataHolder.push({ x: xDataArray[varCount][count], y: yDataArray[varCount][count] });\n } \n }\n chartData.push({ data: dataHolder, pointBackgroundColor: chartPointColors[varCount] });\n }\n\n t.pushNewChartData(chartType, chartData);\n\n\n }\n\n\n }\n\n\n\n procOutput(t, x) {\n if (t.frame.length == 0) {\n if (x != undefined) throw \"error: output can only be used in a procedure.\";\n this.reset([]);\n return;\n }\n t.stack = t.frame;\n t.frame = t.stack.pop();\n t.evline = t.stack.pop();\n t.priority = t.stack.pop();\n t.arglist = t.stack.pop();\n t.cfun = t.stack.pop();\n t.locals.shift();\n t.pushResult(x);\n }\n\n evalLine(l, next) {\n var t = this;\n t.stack.push(t.cfun);\n t.stack.push(t.arglist);\n t.stack.push(t.evline);\n t.stack.push(next);\n t.cfun = undefined;\n t.arglist = [];\n t.evline = [].concat(l);\n }\n\n evalEOL() {\n var t = this;\n if (t.stack.length == 0) return;\n var next = t.stack.pop();\n t.evline = t.stack.pop();\n t.arglist = t.stack.pop();\n t.cfun = t.stack.pop();\n next(t);\n }\n\n flowEnd() {\n var t = this;\n var prim = t.cfun;\n t.priority = t.stack.pop();\n t.arglist = t.stack.pop();\n t.cfun = t.stack.pop();\n if (t.cfun != undefined) throw \"error: \" + prim + \" didn't output to \" + t.cfun;\n }\n\n repeat(n, l) {\n n = Math.round(this.getnum(n));\n this.stack.push(n);\n this.stack.push(l);\n repeatAgain(this);\n\n function repeatAgain(t) {\n var l = t.stack.pop();\n var n = t.stack.pop();\n if (n <= 0) { t.flowEnd(); return; }\n t.stack.push(--n);\n t.stack.push(l);\n t.evalLine(l, repeatAgain);\n }\n }\n\n loop(l) {\n this.stack.push(l);\n loopAgain(this);\n\n function loopAgain(t) {\n var l = t.stack.pop();\n if (t.breakLoop) { t.flowEnd(); t.breakLoop = false; return; }\n t.stack.push(l);\n t.evalLine(l, loopAgain);\n }\n }\n\n\n break() {\n this.breakLoop = true;\n }\n\n logo_run(l) {\n var t = this;\n t.evalLine(l, next);\n\n function next() {\n t.flowEnd();\n }\n }\n\n logo_if(b, l) {\n var t = this;\n if (!b) t.flowEnd();\n else t.evalLine(l, next);\n\n function next() {\n t.flowEnd();\n }\n }\n\n logo_ifelse(b, l1, l2) {\n var t = this;\n if (b) t.evalLine(l1, next);\n else t.evalLine(l2, next);\n\n function next() {\n t.flowEnd();\n }\n }\n\n ipm_se(l) {\n var res = [];\n for (var i = 0; i < l.length; i++) res = res.concat(l[i]);\n return res;\n }\n\n item(n, l) {\n n = this.getnum(n);\n if ((typeof l) == 'object') return l[n - 1];\n return String(l).substring(n - 1, n);\n }\n\n first(l) {\n if ((typeof l) == 'object') return l[0];\n return String(l).substring(0, 1);\n }\n\n butfirst(l) {\n if ((typeof l) == 'object') return l.slice(1);\n return String(l).substring(1);\n }\n\n last(l) {\n if (l && (typeof l) == 'object') return l[l.length - 1];\n return String(l).substring(String(l).length - 1);\n }\n\n butlast(l) {\n if ((typeof l) == 'object') return l.slice(0, -1);\n return String(l).substring(0, String(l).length - 1);\n }\n\n count(l) {\n if ((typeof l) == 'object') return l.length;\n return String(l).length;\n }\n\n word(a, b) {\n if ((typeof a) == 'object') a = a.join(' ');\n if ((typeof b) == 'object') b = b.join(' ');\n return String(a) + String(b);\n }\n\n member(x, l) {\n if ((typeof l) == 'object') {\n for (var i = 0; i < l.length; i++) { if (this.equals(x, l[i])) return true; }\n return false;\n }\n return String(l).indexOf(x) != -1;\n }\n\n time() {\n var now = this.getDate();\n var hour = now.getHours();\n if (hour == 0) hour = 12;\n if (hour > 12) hour -= 12;\n return [hour, now.getMinutes(), now.getSeconds()];\n }\n\n hours() {\n var now = this.getDate();\n var hour = now.getHours();\n var second = now.getSeconds();\n var minute = now.getMinutes();\n if (hour == 0) hour = 12;\n if (hour > 12) hour -= 12;\n hour += minute / 60;\n hour += second / 3600;\n return Math.floor(hour * 100) / 100;\n }\n\n minutes() {\n var now = this.getDate();\n var minute = now.getMinutes();\n var second = now.getSeconds();\n minute += second / 60;\n return Math.floor(minute * 100) / 100;\n }\n\n seconds() {\n var now = this.getDate();\n var second = now.getSeconds();\n var millis = now.getMilliseconds();\n second += millis / 1000;\n return Math.floor(second * 100) / 100;\n }\n\n now() { return new Date().getTime(); }\n\n //New\n getDateTime() {//returns an array with date and time, this is mostly used internally in packets\n var unixT = Date.now(); \n var timezoneoffset = new Date().getTimezoneOffset();\n var localT = unixT - (timezoneoffset * 60000);\n var isoLocal = new Date(localT).toISOString();\n isoLocal = isoLocal.replace(\"T\", \" \").replace(\"Z\", \"\");\n var DateAndTime = isoLocal.split(\" \");\n return DateAndTime;\n }\n\n NowSeconds() {\n //return current time in the form hh:mm:ss\n var now = this.getDate();\n var hour = now.getHours();\n var minute = now.getMinutes();\n var second = now.getSeconds();\n return hour + \":\" + minute + \":\" + second;\n }\n\n deltaTime(date, time) {\n let now = this.now();\n let thenFull = new Date(date + \"T\" + time);\n let difference = now - thenFull.getTime();\n return difference;\n }\n\n getDate() {\n return new Date();\n }\n\n twoDigit(n) {\n n = Math.floor(this.getnum(n));\n n = n.mod(100) + 100;\n return String(n).substring(1);\n }\n\n scale(n, l) {\n var len = l.length;\n for (var i = 0; i < len - 1; i++) {\n if (l[0][0] == n) return l[0][1];\n if (l[1][0] > n) {\n var la = l[0];\n var lb = l[1];\n var fract = (n - la[0]) / (lb[0] - la[0]);\n return la[1] + fract * (lb[1] - la[1]);\n }\n l = l.slice(1);\n }\n return n;\n }\n\n textAlign(str) {\n if (['center', 'left', 'right'].indexOf(str) > -1) this.ctx.textAlign = str;\n else throw \"error: \" + this.cfun + \" doesn't like \" + this.printstr(str) + ' as input; expected center, left or right';\n }\n\n\n mwait(n) {\n if (n <= 0) return;\n this.hold = true;\n this.timeout = setTimeout(function () { this.timeout = undefined; this.hold = false; }.bind(this), n);\n }\n\n\n printstr(x) {\n var type = typeof x;\n if (type == 'number') return String(Math.round(x * 10000) / 10000);\n if (type == 'object') {\n var res = '';\n for (var i in x) { res += this.printstr(x[i]); res += ' '; }\n return res.substring(0, res.length - 1);\n }\n else return String(x);\n }\n\n\n getnum(x) {\n var n;\n n = Number(x);\n if (isNaN(n) || (String(x) == 'false') || (String(x) == 'true')) throw \"error: \" + this.cfun + \" doesn't like \" + this.printstr(x) + ' as input';\n return n;\n }\n\n getlist(x) {\n if ((typeof x) == 'object') return x;\n throw \"error: \" + this.cfun + \" doesn't like \" + this.printstr(x) + ' as input, expected array';\n }\n\n getbool(x) {\n if (String(x) == 'false') return false;\n if (String(x) == 'true') return true;\n throw \"error: \" + this.cfun + \" doesn't like \" + this.printstr(x) + ' as input';\n }\n\n getcolor(x) {\n var type = typeof x;\n if (type == 'object') throw \"error: \" + this.cfun + \" doesn't like \" + this.printstr(x) + ' as input';\n else if (type == 'number' || type == 'string') return x;\n var l = x.split('&');\n if (l.length == 1) return Number(x);\n return [Number(l[0]), Number(l[1])];\n }\n\n equals(a, b) {\n if ((typeof a) != 'object') return a.toString() == b.toString();\n if ((typeof b) != 'object') return a.toString() == b.toString();\n if (a.length != b.length) return false;\n for (var i = 0; i < a.length; i++) { if (!this.equals(a[i], b[i])) return false; }\n return true;\n }\n\n stackPeek(n) { return this.stack[this.stack.length - n - 1]; }\n isDone() { return (this.stack.length == 0) && (this.evline.length == 0); }\n\n\n\n //cc js\n insert(str) {\n var cc = document.getElementById(\"cc\");\n cc.value = cc.value + str;\n }\n\n runLine(str) {\n this.readProcs();\n var line = this.parse(str);\n this.reset(line);\n }\n\n\n //comms js\n\n\n getPacketColumn(column) {\n\n let colNum;\n let columnData = [];\n\n switch (column) {\n case 'type': colNum = 0; break;\n case 'time': colNum = 1; break;\n case 'count': colNum = 2; break;\n case 'adc0': colNum = 3; break;\n case 'adc1': colNum = 4; break;\n case 'adc2': colNum = 5; break;\n case 'adc3': colNum = 6; break;\n case 'adc4': colNum = 7; break;\n case 'adc5': colNum = 8; break;\n }\n\n let packetData = store.getState().packetData.value;\n if (packetData && Array.isArray(packetData)) {\n for (let packet of packetData) {\n if (packet[colNum]) {\n columnData.push(packet[colNum]);\n }\n }\n\n }\n\n return columnData;\n\n\n }\n\n\n //NEW\n readADUAsCelcius(n) { //This should be ADU NOT ADC\n this.hold = true;\n this.sendReceive([0xc0 + n], 2, this.gotSensorasCelcius);\n }\n\n\n readSensor(n) {\n this.hold = true;\n this.sendReceive([0xc0 + n], 2, this.gotsensor);\n\n // this.readADC(n, this.gotsensor); readADC didn't seem necessary here\n }\n\n \n readAccel(){\n this.hold = true;\n this.sendReceive([0xf0 + 9], 4, this.alterPing);\n }\n\n readVel(){\n this.hold = true;\n this.sendReceive([0xf0 + 8], 4, this.alterPing);\n }\n \n readPing(){//This is specifically for the motion sensor\n this.hold = true;\n this.sendReceive([0xf0 + 7], 4, this.alterPing); //ping always calls 0xc7\n }\n alterPing(x){\n var val = x[0] + 256 * x[1] + 256 * 256 * x[2] + 256 * 256 * 256 * x[3];\n\n //Check if the last digit is 1, if so make the value negative and move the decimal place over 2\n const lastDig = val % 10;\n if (lastDig == 1) {\n val = Math.floor(val/10) * -0.01;\n }\n else{\n val = Math.floor(val/10) * 0.01;\n }\n\n val = Math.round(val * 100) / 100;\n\n //Add value to arglist. don't alter.\n this.arglist.pop();\n this.arglist.push(val);\n this.hold = false;\n }\n\n handleVelAcc(x){ //This function can probably be trashed as it's the same as alterPing\n var val = x[0] + 256 * x[1] + 256 * 256 * x[2] + 256 * 256 * 256 * x[3];\n\n const lastDig = val % 10;\n if (lastDig == 1) {\n val = Math.floor(val/10) * -0.01;\n }\n else{\n val = Math.floor(val/10) * 0.01;\n }\n\n this.arglist.pop();\n this.arglist.push(val);\n this.hold = false;\n }\n\n //testing ardunio functionality REMOVE LATER\n /*\n Okay, so these two functions are an example of how to alter the value that has\n been read in by the sensor. You have to give sendRecieve a different function to \n will do the alteration. Here we just add 1 to the value that was read in.\n\n In order for this to work it's going to have to read 32 bits of data instead of 16\n this means parsing x up to the 4th index. This will not be a general use function and\n will only be used for reading the position sensor.\n */\n readTest() {\n this.hold = true;\n this.sendReceive([0xc0 + 6], 4, this.alterTest); //4 here states that we're expecting 4 bytes of data from the buffer.\n }\n alterTest(x){\n var val = x[0] + 256 * x[1] + 256 * 256 * x[2] + 256 * 256 * 256 * x[3];\n\n //Check if the last digit is 1, if so make the value negative and move the decimal place over 2\n const lastDig = val % 10;\n if (lastDig == 1) {\n val = Math.floor(val/10) * -0.01;\n }\n\n //Add value to arglist. don't alter.\n this.arglist.pop();\n this.arglist.push(val);\n this.hold = false;\n }\n\n\n\n\n\n //specific to SI1145 sensor\n\n readIR() {\n this.hold = true;\n this.sendReceive([0xf8], 2, this.gotsensor)\n }\n\n readVisible() {\n this.hold = true;\n this.sendReceive([0xf9], 2, this.gotsensor)\n }\n\n gotSensorasCelcius(x) {\n var val = x[0] + 256 * x[1];\n \n //These values were given to me by Laura and accounts for voltage offset to 0C\n var celcius = 0.575 * val - 72.22;\n this.arglist.pop();\n this.arglist.push(celcius);\n this.hold = false;\n }\n\n gotsensor(x) {\n var val = x[0] + 256 * x[1];\n this.arglist.pop();\n this.arglist.push(val);\n this.hold = false;\n }\n\n readPin(n) {\n this.hold = true;\n this.dread(n, this.gotpin);\n }\n\n gotpin(x) {\n this.arglist.pop();\n this.arglist.push(x[0] == 0);\n this.hold = false;\n }\n\n calibrateList(newString, valuesToCalibrate, calibrationValues) {\n if (Array.isArray(calibrationValues) && Array.isArray(valuesToCalibrate)) {\n if (calibrationValues.length == 4) {\n\n var calibrationResults = [];\n var slope = (calibrationValues[1] - calibrationValues[3]) / (calibrationValues[0] - calibrationValues[2]);\n\n for (var value of valuesToCalibrate) {\n calibrationResults.push(Math.floor((calibrationValues[1] + (value - calibrationValues[0]) * slope) * 100) / 100)\n }\n\n this.setValue(newString, calibrationResults);\n return;\n }\n\n //no error handling; seems like a TODO\n }\n\n }\n\n rb(addr, fcn) {\n var cmd = [].concat(0xfe, this.twobytes(addr));\n this.sendReceive(cmd, 1, fcn);\n }\n\n wb(addr, data) {\n var cmd = [].concat(0xfd, this.twobytes(addr), 1, data);\n this.sendl(cmd);\n }\n\n pinOn(n) {\n this.sendl([0xe0 + n]);\n }\n pinOff(n) { this.sendl([0xd0 + n]); }\n ledOn() { this.sendl([0xef]); }\n ledOff() { this.sendl([0xdf]); }\n\n readADC(n, fcn) {\n return this.sendReceive([0xc0 + n], 2, fcn);\n }\n dread(n, fcn) { this.sendReceive([0xc0 + n], 1, fcn); }\n\n redraw(l) { this.sendl([].concat(0xb0, l)); }\n dotbrightness(b) { this.sendl([0xb1, b]); }\n\n\n twobytes(n) { return [n & 0xff, (n >> 8) & 0xff]; }\n\n sendReceive(sendMessage, n, fcn) {\n if (port && port.readable) {\n this.respfcn = fcn;\n this.resp = [];\n this.respCount = n;\n var message = new Uint8Array([sendMessage])\n const writer = outputStream.getWriter();\n writer.write(message);\n writer.releaseLock();\n } else {\n throw \"error: not connected\";\n }\n }\n\n sendl(command) {\n if (outputStream) {\n var message = new Uint8Array([command])\n const writer = outputStream.getWriter();\n writer.write(message);\n writer.releaseLock();\n } else {\n throw \"error: not connected\";\n }\n }\n\n\n //TODO: There's no error handling for disconnect/reconnect events. This assumes everything works perfectly.\n\n async openSerialPort() {\n port = await navigator.serial.requestPort();\n await port.open({ baudRate: 115200 });\n reader = port.readable.getReader();\n outputStream = port.writable;\n\n document.getElementById(\"connectButton\").style.display = \"none\";\n document.getElementById(\"disconnectButton\").style.display = \"inline-block\";\n this.startReading();\n }\n\n async disconnectSerialPort() {\n if (port) {\n if (reader) {\n await reader.cancel();\n reader = null;\n }\n if (outputStream) {\n await outputStream.getWriter().close();\n outputStream = null;\n }\n await port.close();\n port = null;\n document.getElementById(\"connectButton\").style.display = \"inline-block\";\n document.getElementById(\"disconnectButton\").style.display = \"none\";\n } else { }\n\n }\n\n\n async startReading() {\n\n while (true) {\n\n try {\n const { value, done } = await reader.read();\n // console.log(value,done)\n if(value){\n this.handleReceiveData(value);\n }\n if (done) {\n reader.releaseLock();\n break;\n }\n }\n\n catch(err) {\n console.log(err);\n this.printToConsole(`Error reading data: ${err}`);\n \n //This is kinda messy but this.disconnectSerialPort is acting funky if I just call it\n //so this is ripping those parts of that function out of it. :/\n await outputStream.getWriter().close();\n outputStream = null;\n await port.close();\n port = null;\n document.getElementById(\"connectButton\").style.display = \"inline-block\";\n document.getElementById(\"disconnectButton\").style.display = \"none\";\n \n break;\n }\n\n\n\n //This is an example of how to get a string instead of a number. It can be used, for example, to do a 'read all'. \n //This could be something like adc0:adc1:adc2:adc3... and it gets parsed here.\n\n // var string = new TextDecoder(\"utf-8\").decode(value);\n //var convertedValue = Array.from(new Uint8Array(value));\n\n\n //I guess I didn't need this part? Is it for the packet example above?\n /*\n var newValue;\n if (value[1] != 0) {\n newValue = value[0] + 256 * value[1]\n } else {\n newValue = value[0];\n }\n */\n\n \n\n }\n\n }\n\n //async to catch overflow errors maybe?\n\n async handleReceiveData(receivedValue) {\n\n let value;\n\n try {\n value = Array.from(new Uint8Array(receivedValue));\n for (var i in value) {\n this.gotChar(value[i]);\n }\n }\n\n catch(err) {\n console.log(err)\n this.printToConsole('Error: ' + err);\n }\n\n\n }\n\n gotChar(c) {\n if (this.respCount == 0) return;\n else {\n this.resp.push(c);\n if (this.respCount > this.resp.length) return;\n if (this.respfcn) {\n this.respfcn(this.resp);\n this.respCount = 0;\n this.resp = [];\n }\n }\n }\n\n convert(Uint8Arr) {\n console.log('convert - does this ever run?')\n var length = Uint8Arr.length;\n\n let buffer = Buffer.from(Uint8Arr);\n var result = buffer.readUIntBE(0, length);\n\n return result;\n }\n\n pushToArray(variable, value) {\n var variableValue = this.getValueInternal(variable);\n\n if (variableValue && Array.isArray(variableValue)) {\n variableValue.push(value);\n this.setValue(variable, variableValue);\n } else {\n throw `${variable} is not a valid array`;\n }\n }\n}\n\n\n\n\n\n/************************************************************\n * \n * Primitives\n * \n * Defines all JSLogo functions that the user can perform\n ************************************************************/\n\n\nexport var prims = {};\n\nprims['setclass'] = { nargs: 1, fcn: function (a) { this.setclass(a) } }\nprims['aboutclass'] = { nargs: 1, fcn: function (a) { this.printToConsole(this.aboutClass(a)) } }\n\n/* Charts */\nprims['x-data'] = { nargs: 1, fcn: function (a) { this.setChartListener(\"x\", a) } }\nprims['plot-title'] = { nargs: 1, fcn: function (a) { this.setValue(\"_plotTitle\", a) } }\nprims['y-data'] = { nargs: 1, fcn: function (a) { this.setChartListener(\"y\", a) } }\nprims['x-label'] = { nargs: 1, fcn: function (a) { this.setValue(\"_xLabel\", a) } }\nprims['y-label'] = { nargs: 1, fcn: function (a) { this.setValue(\"_yLabel\", a) } }\nprims['one-plot'] = { nargs: 0, fcn: function () { this.setValue(\"_chartType\", \"single\") } }\nprims['top-plot'] = { nargs: 0, fcn: function () { this.setValue(\"_chartType\", \"top\") } }\nprims['bottom-plot'] = { nargs: 0, fcn: function () { this.setValue(\"_chartType\", \"bottom\") } }\nprims['limits-y'] = { nargs: 2, fcn: function (a, b) { this.setValue(\"_range\", [a, b]) } }\nprims['limits-x'] = { nargs: 2, fcn: function (a, b) { this.setValue(\"_domain\", [a, b]) } }\nprims['y-ticks'] = { nargs: 1, fcn: function (a) { this.setValue(\"_yTickSteps\", a) } }\nprims['x-ticks'] = { nargs: 1, fcn: function (a) { this.setValue(\"_xTickSteps\", a) } }\n\nprims['limits'] = {\n nargs: 4, fcn: function (a, b, c, d) {\n this.setValue(\"_domain\", [a, b]);\n this.setValue(\"_range\", [c, d]);\n }\n}\n\n\nprims['calibrate-list'] = { nargs: 3, fcn: function (a, b, c) { return this.calibrateList(a, b, c) } }\nprims['logData'] = { nargs: 1, fcn: function (a) { this.store.dispatch(add(a)) } }\nprims['save-data'] = { nargs: 1, fcn: function (a) { this.store.dispatch(add(a)) } }\nprims['clear-data'] = { nargs: 0, fcn: function () { this.store.dispatch(clear()) } }\nprims['repeat'] = { nargs: 2, flow: true, fcn: function (a, b) { this.repeat(a, b); } }\nprims['forever'] = { nargs: 1, flow: true, fcn: function (a) { this.loop(a); } }\nprims['loop'] = { nargs: 1, flow: true, fcn: function (a) { this.loop(a); } }\nprims['if'] = { nargs: 2, flow: true, fcn: function (a, b) { this.logo_if(this.getbool(a), b); } }\nprims['ifelse'] = { nargs: 3, flow: true, fcn: function (a, t, f) { this.logo_ifelse(this.getbool(a), t, f); } }\nprims['run'] = { nargs: 1, flow: true, fcn: function (l) { this.logo_run(l); } }\nprims['show-plot'] = { nargs: 0, fcn: function (n) { this.initPlot() } }\n\n//Newly added 2/8/24\nprims['clear-plot'] = { nargs: 0, fcn: function (n) { this.clearPlot() } }\n\n//prims['test'] = { nargs: 0, fcn: function () { this.store.dispatch(add(\"test\")) } }\n\nprims['break'] = { nargs: 0, fcn: function (n) { this.break() } }\n\nprims['..'] = { nargs: 0, flow: true, fcn: function () { this.procOutput(this); } }\nprims['.'] = { nargs: 0, flow: true, fcn: function () { this.procOutput(this); } }\nprims['stop'] = { nargs: 0, flow: true, fcn: function () { this.procOutput(this); } }\nprims['output'] = { nargs: 1, flow: true, fcn: function (x) { return this.procOutput(this, x); } }\nprims['return'] = { nargs: 1, flow: true, fcn: function (x) { return this.procOutput(this, x); } }\nprims['wait'] = { nargs: 1, fcn: function (x) { this.mwait(100 * this.getnum(x)); } }\nprims['mwait'] = { nargs: 1, fcn: function (x) { this.mwait(this.getnum(x)); } }\n\n\n\n/*****\n * \n * Math functions and operators\n * \n */\n\nprims['+'] = { nargs: 2, priority: -1, fcn: function (a, b) { return a + b; } }\nprims['%'] = { nargs: 2, priority: -1, fcn: function (a, b) { return a % b } }\nprims['-'] = { nargs: 2, priority: -1, fcn: function (a, b) { return a - b; } }\nprims['*'] = { nargs: 2, priority: -2, fcn: function (a, b) { return a * b; } }\nprims['/'] = { nargs: 2, priority: -2, fcn: function (a, b) { return a / b; } }\nprims['>='] = { nargs: 2, priority: -2, fcn: function (a, b) { return a >= b } }\nprims['<='] = { nargs: 2, priority: -2, fcn: function (a, b) { return a <= b } }\nprims['='] = { nargs: 2, priority: -2, fcn: function (a, b) { return this.equals(a, b); } }\nprims['!='] = { nargs: 2, priority: -2, fcn: function (a, b) { return !this.equals(a, b); } }\nprims['>'] = { nargs: 2, priority: -2, fcn: function (a, b) { return a > b; } }\nprims['<'] = { nargs: 2, priority: -2, fcn: function (a, b) { return a < b; } }\nprims['xor'] = { nargs: 2, priority: -1, fcn: function (a, b) { return ((a == true && b != true) || (a != true && b == true)) } }\nprims['not'] = { nargs: 1, priority: -1, fcn: function (a) { if (a == true) { return false } return false } }\nprims['or'] = { nargs: 2, priority: -1, fcn: function (a, b) { if (a == true || b == true) { return true } return false } }\nprims['and'] = { nargs: 2, priority: -1, fcn: function (a, b) { if (a == true && b == true) { return true } return false } }\n\n\nprims['remainder'] = { nargs: 2, fcn: function (a, b) { return this.getnum(a).mod(this.getnum(b)); } }\nprims['round'] = { nargs: 1, fcn: function (a) { return Math.round(this.getnum(a)); } }\nprims['int'] = { nargs: 1, fcn: function (a) { return Math.floor(this.getnum(a)); } }\nprims['floor'] = { nargs: 1, fcn: function (a) { return Math.floor(this.getnum(a)); } }\nprims['ceil'] = { nargs: 1, fcn: function (a) { return Math.ceil(this.getnum(a)); } }\nprims['minus'] = { nargs: 1, fcn: function (a) { return -a; } }\nprims['sin'] = { nargs: 1, fcn: function (a) { return turtleMath.sindeg(this.getnum(a)); } }\nprims['cos'] = { nargs: 1, fcn: function (a) { return turtleMath.cosdeg(this.getnum(a)); } }\nprims['sqrt'] = { nargs: 1, fcn: function (a) { return Math.sqrt(this.getnum(a)); } }\nprims['random'] = { nargs: 1, fcn: function (a) { return this.getRandom(a); } }\nprims['random2'] = { nargs: 2, fcn: function (a, b) { return this.getRandom([a, b]); } }\nprims['oneof'] = { nargs: 2, fcn: function (a, b) { return this.nextRandomDouble() < .5 ? a : b; } }\nprims['tan'] = { nargs: 1, fcn: function (a) { return Math.tan(this.getnum(a)) } }\nprims['abs'] = { nargs: 1, fcn: function (a) { return Math.abs(this.getnum(a)) } };\n\nprims['get-packet-data'] = { nargs: 0, fcn: function () { return store.getState().packetData.value } }\nprims['get-packet-col'] = { nargs: 1, fcn: function (a) { return this.getPacketColumn(a) } }\n\n\nprims['sum'] = { nargs: 2, fcn: function (a, b) { return a + b; } }\nprims['difference'] = { nargs: 2, fcn: function (a, b) { return a - b; } }\nprims['product'] = { nargs: 2, fcn: function (a, b) { return a * b; } }\nprims['quotiant'] = { nargs: 2, fcn: function (a, b) { return a / b; } }\nprims['ln'] = { nargs: 1, fcn: function (a) { return Math.log(this.getnum(a)) } }\nprims['power'] = { nargs: 2, fcn: function (a, b) { return Math.pow(this.getnum(a), this.getnum(b)) } }\nprims['exp'] = { nargs: 1, fcn: function (a) { return Math.pow(2.71828, this.getnum(a)) } }\n\n\nprims['se'] = { nargs: 2, fcn: function (a, b) { return [].concat(a, b); } }\nprims['word'] = { nargs: 2, fcn: function (a, b) { return this.word(a, b); } }\nprims['first'] = { nargs: 1, fcn: function (a) { return this.first(a); } }\nprims['butfirst'] = { nargs: 1, fcn: function (a) { return this.butfirst(a); } }\nprims['bf'] = { nargs: 1, fcn: function (a) { return this.butfirst(a); } }\nprims['last'] = { nargs: 1, fcn: function (a) { return this.last(a); } }\nprims['bl'] = { nargs: 1, fcn: function (a) { return this.butlast(a); } }\nprims['butlast'] = { nargs: 1, fcn: function (a) { return this.butlast(a); } }\nprims['fput'] = {\n nargs: 2, fcn: function (a, b) {\n var res = [].concat(this.getlist(b));\n //res.unshift(a); \n return res;\n }\n}\n\nprims['lput'] = { nargs: 2, fcn: function (a, b) { var res = [].concat(this.getlist(b)); res.push(a); return res; } }\nprims['count'] = { nargs: 1, fcn: function (a) { return this.count(a); } }\nprims['item'] = { nargs: 2, fcn: function (n, l) { return this.item(n, l); } }\nprims['nth'] = { nargs: 2, fcn: function (n, l) { return this.getlist(l)[this.getnum(n)]; } }\nprims['setnth'] = { nargs: 3, fcn: function (n, l, d) { this.getlist(l)[this.getnum(n)] = d; } }\nprims['member?'] = { nargs: 2, fcn: function (x, l) { return this.member(x, l); } }\nprims['empty?'] = { nargs: 1, fcn: function (l) { return l.length == 0; } }\nprims['pick'] = { nargs: 1, fcn: function (l) { return l[this.getRandom(0, this.getlist(l).length - 1)]; } }\nprims['is-defined'] = { nargs: 1, fcn: function (name) { return this.isDefined(name) } }\n\nprims['print'] = { nargs: 1, fcn: function (x) { this.printToConsole(this.printstr(x)); } }\n\nprims['typeof'] = { nargs: 1, fcn: function (x) { return (typeof x) } }\n\n\nprims['clean'] = { nargs: 0, fcn: function (n) { this.clean(); } }\nprims['clear'] = { nargs: 0, fcn: function () { this.cleanConsole(); } }\nprims['forward'] = { nargs: 1, fcn: function (n) { this.forward(this.getnum(n)); } }\nprims['fd'] = { nargs: 1, fcn: function (n) { this.forward(this.getnum(n)); } }\nprims['back'] = { nargs: 1, fcn: function (n) { this.forward(this.getnum(-n)); } }\nprims['bk'] = { nargs: 1, fcn: function (n) { this.forward(this.getnum(-n)); } }\nprims['right'] = { nargs: 1, fcn: function (n) { this.right(this.getnum(n)); } }\nprims['rt'] = { nargs: 1, fcn: function (n) { this.right(this.getnum(n)); } }\nprims['left'] = { nargs: 1, fcn: function (n) { this.right(this.getnum(-n)); } }\nprims['lt'] = { nargs: 1, fcn: function (n) { this.right(this.getnum(-n)); } }\nprims['setheading'] = { nargs: 1, fcn: function (n) { this.seth(this.getnum(n)); } }\nprims['seth'] = { nargs: 1, fcn: function (n) { this.seth(this.getnum(n)); } }\nprims['setxy'] = { nargs: 2, fcn: function (x, y) { this.lineto(this.getnum(x), this.getnum(y)); } }\nprims['gotoxy'] = { nargs: 2, fcn: function (x, y) { this.lineto(this.getnum(x), this.getnum(y)); } }\nprims['lineto'] = { nargs: 2, fcn: function (x, y) { this.lineto(this.getnum(x), this.getnum(y)); } }\nprims['arc'] = { nargs: 2, fcn: function (a, r) { this.arc(this.getnum(a), this.getnum(r)); } }\n\nprims['fillscreen'] = { nargs: 2, fcn: function (c, s) { this.fillscreen(this.getcolor(c), s); } }\nprims['setcolor'] = { nargs: 1, fcn: function (n) { this.setcolor(this.getcolor(n)); } }\nprims['setc'] = { nargs: 1, fcn: function (n) { this.setcolor(this.getcolor(n)); } }\nprims['setshade'] = { nargs: 1, fcn: function (n) { this.setshade(n); } }\nprims['setsh'] = { nargs: 1, fcn: function (n) { this.setshade(n); } }\nprims['setpensize'] = { nargs: 1, fcn: function (n) { this.setpensize(n); } }\nprims['setps'] = { nargs: 1, fcn: function (n) { this.setpensize(n); } }\nprims['pendown'] = { nargs: 0, fcn: function (n) { this.pendown = true; } }\nprims['pd'] = { nargs: 0, fcn: function (n) { this.pendown = true; } }\nprims['penup'] = { nargs: 0, fcn: function (n) { this.pendown = false; } }\nprims['pu'] = { nargs: 0, fcn: function (n) { this.pendown = false; } }\nprims['startfill'] = { nargs: 0, fcn: function () { this.startfill(); } }\nprims['endfill'] = { nargs: 0, fcn: function () { this.endfill(); } }\nprims['setopacity'] = { nargs: 1, fcn: function (n) { this.opacity = this.getnum(n) / 100; } }\n\nprims['drawtext'] = { nargs: 1, fcn: function (str) { this.drawString(this.printstr(str)); } }\nprims['textalign'] = { nargs: 1, fcn: function (str) { this.textAlign(str); } }\nprims['setfont'] = { nargs: 1, fcn: function (f) { this.setfont(f); } }\nprims['setfontsize'] = { nargs: 1, fcn: function (s) { this.setfontsize(s); } }\nprims['setlinestyle'] = { nargs: 1, fcn: function (l) { this.setlinedash(l); } }\n\nprims['xcor'] = { nargs: 0, fcn: function (n) { return Math.floor(this.xcor); } }\nprims['ycor'] = { nargs: 0, fcn: function (n) { return Math.floor(this.ycor); } }\nprims['tcor'] = { nargs: 0, fcn: function (n) { return [Math.floor(this.xcor), Math.floor(this.ycor)]; } }\nprims['heading'] = { nargs: 0, fcn: function (n) { return this.heading; } }\nprims['color'] = { nargs: 0, fcn: function (n) { return this.color; } }\nprims['shade'] = { nargs: 0, fcn: function (n) { return this.shade; } }\nprims['pensize'] = { nargs: 0, fcn: function (n) { return this.pensize; } }\nprims['opacity'] = { nargs: 0, fcn: function (n) { return 100 * this.opacity; } }\n\nprims['hide-turtle'] = { nargs: 0, fcn: function (n) { this.hideTurtle(); } }\nprims['ht'] = { nargs: 0, fcn: function (n) { this.hideTurtle(); } }\nprims['showturtle'] = { nargs: 0, fcn: function (n) { this.showTurtle(); } }\nprims['st'] = { nargs: 0, fcn: function (n) { this.showTurtle(); } }\nprims['setup'] = { nargs: 0, fcn: function () { this.setup() } }\n\nprims['drawsnap'] = { nargs: 1, fcn: function (n) { this.hold = true; this.loadimg(this.snaps[n], function () { this.hold = false; }); } }\n\nprims['flushtime'] = { nargs: 1, fcn: function (n) { flushtime = this.getnum(n); } }\n\nprims['( '] = { nargs: 1, fcn: function (x) { this.evline.shift(); return x; } }\n\nprims['se '] = { nargs: 'ipm', fcn: function () { return this.ipm_se(arguments); } }\n\nprims['now'] = { nargs: 0, fcn: function () { return Math.floor(Date.now() / 1000) } }\n\nprims['getDateTime'] = { nargs: 0, fcn: function () { return this.getDateTime() } }\nprims['NowMilli'] = { nargs: 0, fcn: function () { return Date.now() } } //Return the current time in milliseconds\nprims['NowSeconds'] = { nargs: 0, fcn: function () { return this.NowSeconds() } } //create a new function to return the current time in seconds\n\n\nprims['unixtime'] = { nargs: 0, fcn: function () { return Math.floor(Date.now() / 1000) } }\nprims['time'] = { nargs: 0, fcn: function () { return this.time(); } }\nprims['hours'] = { nargs: 0, fcn: function () { return this.hours(); } }\nprims['minutes'] = { nargs: 0, fcn: function () { return this.minutes(); } }\nprims['seconds'] = { nargs: 0, fcn: function () { return this.seconds(); } }\nprims['2digit'] = { nargs: 1, fcn: function (n) { return this.twoDigit(n); } }\nprims['clockspeed'] = { nargs: 1, fcn: function (n) { this.clockspeed = this.getnum(n); } }\nprims['scale'] = { nargs: 2, fcn: function (n, l) { return this.scale(this.getnum(n), this.getlist(l)); } }\n\nprims['true'] = { nargs: 0, fcn: function () { return true; } }\nprims['false'] = { nargs: 0, fcn: function () { return false; } }\n\nprims['push'] = { nargs: 2, fcn: function (a, b) { this.pushToArray(a, b); } }\nprims['make'] = { nargs: 2, fcn: function (a, b) { this.setValue(a, b); } }\nprims['let'] = { nargs: 2, fcn: function (a, b) { this.setLocalValue(a, b); } }\nprims['loadpic'] = { nargs: 1, fcn: function (a) { this.loadBackgroundImage(a) } }\n\nprims['ob1on'] = { nargs: 0, fcn: function () { this.ledOn(); this.mwait(1); } }\nprims['ob1off'] = { nargs: 0, fcn: function () { this.ledOff(); this.mwait(1); } }\n\nprims['dp2on'] = { nargs: 0, fcn: function () { this.pinOn(2); this.mwait(1); } }\nprims['dp2off'] = { nargs: 0, fcn: function () { this.pinOff(2); this.mwait(1); } }\nprims['dp3on'] = { nargs: 0, fcn: function () { this.pinOn(3); this.mwait(1); } }\nprims['dp3off'] = { nargs: 0, fcn: function () { this.pinOff(3); this.mwait(1); } }\nprims['dp4on'] = { nargs: 0, fcn: function () { this.pinOn(4); this.mwait(1); } }\nprims['dp4off'] = { nargs: 0, fcn: function () { this.pinOff(4); this.mwait(1); } }\nprims['dp5on'] = { nargs: 0, fcn: function () { this.pinOn(5); this.mwait(1); } }\nprims['dp5off'] = { nargs: 0, fcn: function () { this.pinOff(5); this.mwait(1); } }\nprims['dp6on'] = { nargs: 0, fcn: function () { this.pinOn(6); this.mwait(1); } }\nprims['dp6off'] = { nargs: 0, fcn: function () { this.pinOff(6); this.mwait(1); } }\nprims['dp7on'] = { nargs: 0, fcn: function () { this.pinOn(7); this.mwait(1); } }\nprims['dp7off'] = { nargs: 0, fcn: function () { this.pinOff(7); this.mwait(1); } }\nprims['dp8on'] = { nargs: 0, fcn: function () { this.pinOn(8); this.mwait(1); } }\nprims['dp8off'] = { nargs: 0, fcn: function () { this.pinOff(8); this.mwait(1); } }\nprims['dp9on'] = { nargs: 0, fcn: function () { this.pinOn(9); this.mwait(1); } }\nprims['dp9off'] = { nargs: 0, fcn: function () { this.pinOff(9); this.mwait(1); } }\nprims['dp10on'] = { nargs: 0, fcn: function () { this.pinOn(10); this.mwait(1); } }\nprims['dp10off'] = { nargs: 0, fcn: function () { this.pinOff(10); this.mwait(1); } }\nprims['dp11on'] = { nargs: 0, fcn: function () { this.pinOn(11); this.mwait(1); } }\nprims['dp11off'] = { nargs: 0, fcn: function () { this.pinOff(11); this.mwait(1); } }\nprims['dp12on'] = { nargs: 0, fcn: function () { this.pinOn(11); this.mwait(1); } }\nprims['dp12off'] = { nargs: 0, fcn: function () { this.pinOff(11); this.mwait(1); } }\nprims['send'] = { nargs: 1, fnc: function (a) { this.sendl(a); this.mwait(1) } }\n\nprims['readADC0'] = { nargs: 0, fcn: function () { this.readSensor(0); return this.cfun; } }\nprims['readADC1'] = { nargs: 0, fcn: function () { this.readSensor(1); return this.cfun; } }\nprims['readADC2'] = { nargs: 0, fcn: function () { this.readSensor(2); return this.cfun; } }\nprims['readADC3'] = { nargs: 0, fcn: function () { this.readSensor(3); return this.cfun; } }\nprims['readADC4'] = { nargs: 0, fcn: function () { this.readSensor(4); return this.cfun; } }\nprims['readADC5'] = { nargs: 0, fcn: function () { this.readSensor(5); return this.cfun; } }\nprims['readADC'] = { nargs: 1, fcn: function (pinNumber) { this.readSensor(pinNumber); return this.cfun; } }\nprims['read-ir'] = { nargs: 0, fcn: function () { this.readIR(); return this.cfun; } }\nprims['read-visible'] = { nargs: 0, fcn: function () { this.readVisible(); return this.cfun; } }\nprims['init-ir'] = { nargs: 0, fcn: function () { this.sendl([0xf1]); } }\n\nprims['readPing'] = { nargs: 0, fcn: function () { this.readPing(); return this.cfun; } }\nprims['readTest'] = { nargs: 0, fcn: function () { this.readTest(); return this.cfun; } }\nprims['readVel'] = { nargs: 0, fcn: function () { this.readVel(); return this.cfun; } }\nprims['readAccel'] = { nargs: 0, fcn: function () { this.readAccel(); return this.cfun; } }\n\nprims['_test'] = { nargs: 0, fcn: function () { this._test(); return this.cfun; } }\n\n//Eventually I want to read temperature values and convert them to Celsius\nprims['readADUAsCelcius'] = { nargs: 1, fcn: function (pinNumber) { this.readADUAsCelcius(pinNumber); return this.cfun; } }\n\n\nprims['deltaTime'] = { nargs: 2, fcn: function (date, time) { return this.deltaTime(date, time) } }\n\nprims['move'] = { nargs: 3, fcn: function (name, x, y) { this.moveInsantiatedObject(name, x, y) } }\nprims['delete'] = { nargs: 1, fcn: function (name) { this.deleteInsantiatedObject(name) } }\nprims['new'] = { nargs: 4, fcn: function (name, url, xpos, ypos) { this.createInstantiatedObject(name, url, [xpos, ypos]) } };\n","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAGymlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIxLTAzLTExVDEzOjQ5OjE0LTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0xM1QxMzo0NTo0MC0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMC0xM1QxMzo0NTo0MC0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo5OGQ4NDRmMS0zNjc2LThiNDctYTRmNy0xNzAzMWM0MjA2NjYiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo2ZTBlMTVhNS0yMDE0LTc2NDEtOTYzZS0yYmNmOGUwZTBhNWQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowZWM5NmEzNC04MjQ0LTA4NDQtODU3NS1kZmNmNjQwZjdjMGQiPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjBlYzk2YTM0LTgyNDQtMDg0NC04NTc1LWRmY2Y2NDBmN2MwZCIgc3RFdnQ6d2hlbj0iMjAyMS0wMy0xMVQxMzo0OToxNC0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpkNDcxNDQxZS1jNjA4LTg0NDQtOGExMC1kNTk5M2JlMjdkZGUiIHN0RXZ0OndoZW49IjIwMjEtMDMtMTFUMTM6NTA6NDItMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6OThkODQ0ZjEtMzY3Ni04YjQ3LWE0ZjctMTcwMzFjNDIwNjY2IiBzdEV2dDp3aGVuPSIyMDIxLTEwLTEzVDEzOjQ1OjQwLTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+XZyQ/AAAAu1JREFUaN7tmU9IVEEYwFeziCxKD5UYgQVRBKWhYUR4UEoKSYQ6dN6gm3oMTFf04kUvQahohxJPUodIyqWwQ4cg0qCCDDwUQgQappTbbuv34Fv4+pp5f2bm7dOYww+WffO++X5vZ76ZNxvLZrOx/4GYFbEiVsSKWJHIRJILS/lgD9ACJIBRwjAQB6pVY+dL5CAm/wHIupACHgDNG1HkFvDLQ0BEEji9EUS2Ai8lSX7BRHO8AjKStvEoRbYBM4KkRoBaoFBwTzlwHXivIhOWyGuWyNsgwwRoF8g0hSVyFGjDSTwE9GMCt1kCdyW/gBdngDSJ43zeb1LEebJPfU7YWc1ftonFGzclkghQdZxSutfAML3D4lboigwKkl0EJlFwnK0TnYbmWwGwQuIO6Ig0M4EMzocSQdsLwDRw3GDxGCV9v9MRoQvaT6AyT1sa0VxJiR6gl0iJYEjV5VnCoRRYJTkc8StSiON+kUk8ikAit0v4TvK46UfEsX8jqURXIhLZLchl0E2kCPgouGkK6AH2KSZyFTigIbJDsFv4S4aLPGQNnwDHNJ9mHGPN4xDRidWIk/2frQsVOcsajBkYEnEWc8aAzEngN4n5lYvcIxcXDJdM0zJ8XWuhIp/JhW4DTy3tsn0xIfOJxOulIrTjc5oSKR97MV2ZXhJrgor8IBdqQpYwIdNKd9lUZI1caFAIfF7hvTz32ntIob/7dHtPReY0K9YLvHcZWZUkniZtlvG7roB9bWErfSsV6WIdnlA4s9pFkFWt56ydw86AffWxmIepyHbgD6vPFRqTsVoiMml4bZoWrew3WKM13DyWK3RY73JeFTRWMZ6+jAjilck2jcOCxhl8+0u6UKUh0uES9xmwJIl1zWsb369QfS5riMwH7OsbVklfL1b1eA7rd124qCEyG6BUJ7CwBH7VLcOkvCjVEDnlI36N2/lYmGe/DQYne6SH2JckInObTcQ53nwsqEIdoYrY/xCtiBWxIlbEiiiyDliNUdbMJzf/AAAAAElFTkSuQmCC\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHtGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTExLTA1VDEzOjI3OjAxLTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjoxOC0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjoxOC0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowZDAyMzdmNy1lY2MxLWZmNDctYmVmYi00ZTA4YjI2Y2JlNTEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDoxYThkYWEyMi01MjE5LTEyNGYtYWQzMC0xYTdlMjA1MTNhMDAiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDpjZTQwMzRhZC05MDNkLTdlNGQtOTYxNC0wNTQxNTQwYjExZWMiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWE4ZGFhMjItNTIxOS0xMjRmLWFkMzAtMWE3ZTIwNTEzYTAwPC9yZGY6bGk+IDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjFiNTdiMjBiLWVkNWQtNDg0OS04NGEyLTQ1MDkwOWE4NGY3MDwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmNlNDAzNGFkLTkwM2QtN2U0ZC05NjE0LTA1NDE1NDBiMTFlYyIgc3RFdnQ6d2hlbj0iMjAyMC0xMS0wNVQxMzoyNzowMS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDo5MDYyYjlmZS0wZGFkLTM0NGUtYTlhNi0yZTdhZmUzZjdiMDIiIHN0RXZ0OndoZW49IjIwMjAtMTEtMDVUMTQ6MDk6MTktMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MGQwMjM3ZjctZWNjMS1mZjQ3LWJlZmItNGUwOGIyNmNiZTUxIiBzdEV2dDp3aGVuPSIyMDIxLTEwLTEzVDEzOjQ2OjE4LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+u4oKfwAAASNJREFUaN7t2L0KwjAUBeDOYtFHErq6Cz5JB4c4KPgkLk51NG/i3lVwc4o3cguh1KGamx89w2khFJqvN2lCCmNM8Qt5XXR7850ppaUYyp3vLbdLvE8MUjoA44BKQAABBBBAAAEEEEAAAQQQQAABBJC/g0woW8qeopzU3PboQR7cXvee31COlFUsyNBX/ybrmENr6QmhUpgj5y8RN8o8BcicOxOtGj7/WipmNXxCPq2KSnEdGVsVneqCOLYqVcoruwo9pCS3KDrUBJeGVKGrIblpVCGrIQl5N/FVbtv4oapoKYQ0pF+VKleIzY4RO0lECMiCcuJ71pBgAQQQYYg9EZnxgUJusf2edJDGOXvKLbbfTQe5eDzWiZFLBzlQrgzKLbbfhyddUOfu3f+jdwAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHtGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTExLTA1VDEzOjI3OjAxLTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjowMy0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjowMy0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDowMDA4NGM2Ny01Y2IxLTZiNGUtODA2OS01NTI5Mjg1MWJlZDkiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDozN2JlOGNlNS1iMDIyLWUwNGItOGQxYS01MzE0YmQ5MDRhNGIiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2N2YwZWNhZC04MzRiLTQ0NGQtOGIzYi0yMDMzMWE0MTY5N2EiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWE4ZGFhMjItNTIxOS0xMjRmLWFkMzAtMWE3ZTIwNTEzYTAwPC9yZGY6bGk+IDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjFiNTdiMjBiLWVkNWQtNDg0OS04NGEyLTQ1MDkwOWE4NGY3MDwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY3ZjBlY2FkLTgzNGItNDQ0ZC04YjNiLTIwMzMxYTQxNjk3YSIgc3RFdnQ6d2hlbj0iMjAyMC0xMS0wNVQxMzoyNzowMS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNmQyMzQ0NS1hMjNjLWU2NGQtOTljMS0xOWE1MzhlZGYxYzkiIHN0RXZ0OndoZW49IjIwMjAtMTEtMDVUMTQ6MTA6MjUtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MDAwODRjNjctNWNiMS02YjRlLTgwNjktNTUyOTI4NTFiZWQ5IiBzdEV2dDp3aGVuPSIyMDIxLTEwLTEzVDEzOjQ2OjAzLTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+26uVFAAAAUFJREFUaN7t2jEKwjAUgOEewHu49wpCwSsIvUAPoCgIWVycOzh4CKFSKDj0BL2Ck65CN0GorxBBxdYmzetL9Q3/JAn9INTI0ymKwvmFHIYwhCHqkMP5UjaCEijXbCf3qWunsW+kAnGhwkB+DcLX3VcFklkMyVUgJhBNjxYqJH9bnEJCIa8B4pH3tG4KzaArFiRQeLC2raEbFkR0hIixj5YgROyhY18gVYgNNIROfYBUIWL5+bwPR+sbomxlO6QJoiy0GdIUUTZuc0XBhKggPt0AIhsgOohHE5lDDWmDeIkSYgxBCTGKoIAMMBAUkCUGggKyxUBQQDzDCNLX70iuXbREWPeFqJO1VxTVwj7+1P2UYAhDGMIQhjDEFkhACAkoxwomS6kHPWhRjN4wyiiGoRi5XY+nTZfIZ+J/PjCEIf8MuQP2kxf3E5/WqAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHaGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTExLTA1VDEzOjI3OjAxLTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjowOS0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMC0xM1QxMzo0NjowOS0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpjNWFjNjg4Yy1hOWZhLWY1NDEtOTUzZS1jZGU2NGQ3MjNkNDEiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMGU4ZmNlNi05OTQwLWFiNDYtYjUwMi03YTNjMjJhMThjZjEiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDoxZDdmOTZjYy1mMDQwLTEyNGEtYTdlMS1lNTk4ZTRhODUzNWYiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWI1N2IyMGItZWQ1ZC00ODQ5LTg0YTItNDUwOTA5YTg0ZjcwPC9yZGY6bGk+IDwvcmRmOkJhZz4gPC9waG90b3Nob3A6RG9jdW1lbnRBbmNlc3RvcnM+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MWQ3Zjk2Y2MtZjA0MC0xMjRhLWE3ZTEtZTU5OGU0YTg1MzVmIiBzdEV2dDp3aGVuPSIyMDIwLTExLTA1VDEzOjI3OjAxLTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmI0MjUyNWRkLTkzNmUtNGU0Yy05Nzg5LTg0YTYwZjVjZTg2MyIgc3RFdnQ6d2hlbj0iMjAyMC0xMS0wNVQxNDowNzo1OS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNWFjNjg4Yy1hOWZhLWY1NDEtOTUzZS1jZGU2NGQ3MjNkNDEiIHN0RXZ0OndoZW49IjIwMjEtMTAtMTNUMTM6NDY6MDktMDc6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8L3JkZjpTZXE+IDwveG1wTU06SGlzdG9yeT4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4oCBwFAAAAo0lEQVRo3u3asQ2AIBBAUaYhkTVcgGVYh8QJXMB5bB0BKWy5xovC8Ytf4yOIFudKKc5CDkjPkOO8tFpqudGitc4XkFgrjeJIkFWArECAAAECBAgQIECAAOkR4gWI/wISnh17WxIgSWmNIEF24QF6a5cg20CQTYLkgSB5CoiZo2XmZTdz/Zr5IPKLAgQIECBAgAABAgTItBAzAwP/jnAwHQRErxsWuQddDJx0vAAAAABJRU5ErkJggg==\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAACXBIWXMAAAsTAAALEwEAmpwYAAAHtGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxNDIgNzkuMTYwOTI0LCAyMDE3LzA3LzEzLTAxOjA2OjM5ICAgICAgICAiPiA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPiA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgeG1sbnM6cGhvdG9zaG9wPSJodHRwOi8vbnMuYWRvYmUuY29tL3Bob3Rvc2hvcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHhtcDpDcmVhdGVEYXRlPSIyMDIwLTExLTA1VDEzOjI3OjAxLTA4OjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMS0xMC0xM1QxMzo0NTo0Ni0wNzowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMS0xMC0xM1QxMzo0NTo0Ni0wNzowMCIgZGM6Zm9ybWF0PSJpbWFnZS9wbmciIHBob3Rvc2hvcDpDb2xvck1vZGU9IjMiIHBob3Rvc2hvcDpJQ0NQcm9maWxlPSJzUkdCIElFQzYxOTY2LTIuMSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDoxNmZjOTZhZi0xZmMxLWMzNDAtOWE5ZS1iNjdkOWY1NTRiNGMiIHhtcE1NOkRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDo4NTE3N2I3OC0xNjlkLTM4NDYtYjE0ZC05MGQ4MTBiNWI0NmQiIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo2N2YwZWNhZC04MzRiLTQ0NGQtOGIzYi0yMDMzMWE0MTY5N2EiPiA8cGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8cmRmOkJhZz4gPHJkZjpsaT5hZG9iZTpkb2NpZDpwaG90b3Nob3A6MWE4ZGFhMjItNTIxOS0xMjRmLWFkMzAtMWE3ZTIwNTEzYTAwPC9yZGY6bGk+IDxyZGY6bGk+YWRvYmU6ZG9jaWQ6cGhvdG9zaG9wOjFiNTdiMjBiLWVkNWQtNDg0OS04NGEyLTQ1MDkwOWE4NGY3MDwvcmRmOmxpPiA8L3JkZjpCYWc+IDwvcGhvdG9zaG9wOkRvY3VtZW50QW5jZXN0b3JzPiA8eG1wTU06SGlzdG9yeT4gPHJkZjpTZXE+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjcmVhdGVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjY3ZjBlY2FkLTgzNGItNDQ0ZC04YjNiLTIwMzMxYTQxNjk3YSIgc3RFdnQ6d2hlbj0iMjAyMC0xMS0wNVQxMzoyNzowMS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTggKFdpbmRvd3MpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJzYXZlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDozNmQyMzQ0NS1hMjNjLWU2NGQtOTljMS0xOWE1MzhlZGYxYzkiIHN0RXZ0OndoZW49IjIwMjAtMTEtMDVUMTQ6MTA6MjUtMDg6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCBDQyAyMDE4IChXaW5kb3dzKSIgc3RFdnQ6Y2hhbmdlZD0iLyIvPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0ic2F2ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6MTZmYzk2YWYtMWZjMS1jMzQwLTlhOWUtYjY3ZDlmNTU0YjRjIiBzdEV2dDp3aGVuPSIyMDIxLTEwLTEzVDEzOjQ1OjQ2LTA3OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgQ0MgMjAxOCAoV2luZG93cykiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+c3+EIAAAARJJREFUaN7t2j8OgjAUx3EcTdG7eAo3DsIRWHiju17ErjJwAo/gyGpiOrnUmnRoSDH8qaGv+Q3fzYFPDPBeQ6a1zpruKU03psmvIbMQzTkX0pleTOtcSG7aMS13IawDBJAEIGRjDdk4z/w9Z8jVgdRcIUXvLaxMghtEDIwUxA1CAxDFCSLsBQ8NepILhEZMrQUHiBo5gouYIXLCLkGxQoqJS1GQx3FoiJi54VFsEJoJWfyvhISICTe4rzoWCC08QHibDjFAVLP8NORuzw5WgWxNj4BHO+c1IRdncerXei62/fH7Y6xjfOmBlBz3EUphjAcEEEAAAQQQQAABBBBAAAEEkAQhJw/kxBFSeb7mqf4GSaEP4Ij6lDSoK+YAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/Blank.8bcd2d4e.logo\";","module.exports = __webpack_public_path__ + \"static/media/ModelMolecules.66b5b7af.logo\";","module.exports = __webpack_public_path__ + \"static/media/BasicBoard.412d9fda.logo\";","module.exports = __webpack_public_path__ + \"static/media/LightShow.30c0ebf2.logo\";","module.exports = __webpack_public_path__ + \"static/media/IntroSensors.1428ad52.logo\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABLCAIAAAAJerXgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDEgNzkuMTRlY2I0MiwgMjAyMi8xMi8wMi0xOToxMjo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI0LjIgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0wMy0wOFQyMjowODowMS0wODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMy0wMy0wOFQyMjowODowMS0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDMtMDhUMjI6MDg6MDEtMDg6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MjBiYzA1ZTQtMzI3NC0zODQzLWJkMTItN2I1Zjc2OTMyYWMyIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MDI2ZTU3NzctMTIzMy1hYTQzLTg0M2YtNTk0MjdiNDk0Y2ViIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YmVhOWJiNDktMzIwNS05YTRkLWJmOTEtMGU2MDM3MTRkNGI5IiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YmVhOWJiNDktMzIwNS05YTRkLWJmOTEtMGU2MDM3MTRkNGI5IiBzdEV2dDp3aGVuPSIyMDIzLTAzLTA4VDIyOjA4OjAxLTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjQuMiAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjIwYmMwNWU0LTMyNzQtMzg0My1iZDEyLTdiNWY3NjkzMmFjMiIgc3RFdnQ6d2hlbj0iMjAyMy0wMy0wOFQyMjowODowMS0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI0LjIgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PqQRYrIAAACNSURBVHja7dBBCQAgEADB62EQe1xV8/i2hhX8HIoMbIBlovXUYYEAFixYsGDBQgDrKtaYq7T3B2DBggULFixYsGDBggULFixYsGDBggULFixYsGDBggULFixYsGDBggULFixYsGDBggULFixYsGDBggULFixYsGDBggULFizBggULFixYggULFixY/7YBDJxntkMux+kAAAAASUVORK5CYII=\"","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABLCAIAAAAJerXgAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgOS4wLWMwMDEgNzkuMTRlY2I0MiwgMjAyMi8xMi8wMi0xOToxMjo0NCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDI0LjIgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0wMy0wOFQyMjowNzowNC0wODowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMy0wMy0wOFQyMjowNzowNC0wODowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDMtMDhUMjI6MDc6MDQtMDg6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6OGM5OTEyMTktNWYwOC1mZDQ0LTkxNTctZjI4Y2JjMWNjZDAyIiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MGFhYzE0ZGQtYTk4ZS1lZjQwLTllYWYtZTVhODI3OTU5MjhmIiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YmY1ZDU4NDctOWFmYS1lNjQ5LWI1MDgtZjkxNzNmYTI5NzE0IiBkYzpmb3JtYXQ9ImltYWdlL3BuZyIgcGhvdG9zaG9wOkNvbG9yTW9kZT0iMyI+IDx4bXBNTTpIaXN0b3J5PiA8cmRmOlNlcT4gPHJkZjpsaSBzdEV2dDphY3Rpb249ImNyZWF0ZWQiIHN0RXZ0Omluc3RhbmNlSUQ9InhtcC5paWQ6YmY1ZDU4NDctOWFmYS1lNjQ5LWI1MDgtZjkxNzNmYTI5NzE0IiBzdEV2dDp3aGVuPSIyMDIzLTAzLTA4VDIyOjA3OjA0LTA4OjAwIiBzdEV2dDpzb2Z0d2FyZUFnZW50PSJBZG9iZSBQaG90b3Nob3AgMjQuMiAoV2luZG93cykiLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOjhjOTkxMjE5LTVmMDgtZmQ0NC05MTU3LWYyOGNiYzFjY2QwMiIgc3RFdnQ6d2hlbj0iMjAyMy0wMy0wOFQyMjowNzowNC0wODowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDI0LjIgKFdpbmRvd3MpIiBzdEV2dDpjaGFuZ2VkPSIvIi8+IDwvcmRmOlNlcT4gPC94bXBNTTpIaXN0b3J5PiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PiMxsNwAAACaSURBVHja7doxDQAgDABBfCAEH1hFDzM2sMDQlEAu+b3NjU1LbV2HFQSwYMGCBQsWAlhXscZcUeVPjFoJFixYsGDBggULFixYsGDBggULFixYsGDBggULFixYsGDBggXLYwgsWLBgwYIFCxYsWLBgwYIFKxMr8z7z/IkGFixYsGDBggULFixYsLKwBAsWLFiwYAkWLFiwYP3bBqlZvmEtQogeAAAAAElFTkSuQmCC\"","module.exports = __webpack_public_path__ + \"static/media/Motion.21e7590e.logo\";","module.exports = __webpack_public_path__ + \"static/media/Position.4a5ff11a.logo\";","module.exports = __webpack_public_path__ + \"static/media/PacketsNew.428b627d.logo\";","module.exports = __webpack_public_path__ + \"static/media/fm_dev.8d50a9cd.logo\";","import Dexie from 'dexie';\n\nvar localDatabase = new Dexie('lbym');\n\nexport default class Projects {\n\n //all this is way c\n\n constructor(updateCode) {\n this.globalUpdateCode = updateCode;\n }\n\n async initializeDatabase() {\n localDatabase.version(4).stores({\n projects: '++id, name, code, projectId, date, view',\n })\n }\n\n\n\n async writeLastCodeToLocalStorage(code) {\n\n //read the database and see if 'recover' exists; if so, get the id key\n\n this.getRecoverEntry().then(async function (entries) {\n if (entries && entries.length > 0) {\n\n //if a recovery entry exists, update it with the new code and most recent\n\n var recoveryId = entries[0][\"id\"];\n await localDatabase.projects.update(recoveryId, {\n name: \"recover\",\n code: code,\n date: Date.now()\n })\n } else {\n await localDatabase.projects.add({\n name: 'recover',\n code: code,\n date: Date.now()\n })\n }\n\n })\n\n}\n\n\n async writePidToStorage(pid) {\n var context = this;\n\n //read the database and see if 'recover' exists; if so, get the id key\n\n this.getRecoverEntry().then(async function (entries) {\n if (entries && entries.length > 0) {\n\n //if a recovery entry exists, update it with the new code\n var recoveryId = entries[0][\"id\"];\n await localDatabase.projects.update(recoveryId, {\n projectId: pid\n }).then(context.getRecoverEntry())\n } else {\n await localDatabase.projects.add({\n name: 'recover',\n projectId: pid,\n })\n //if a recover entry doesn't exist, create it\n\n //TODO\n\n }\n\n })\n\n\n}\n\n\n\n\n async getRecoverEntry() {\n var returnValue = false;\n if (localDatabase && localDatabase.projects) {\n returnValue = await localDatabase.projects.where('name').equals('recover').toArray();\n }\n return returnValue;\n\n}\n\n\n\nsaveAs(title) {\n var filename = `${title}.txt`;\n var textToSave = document.getElementById('procs').value;\n var newFile = new Blob([textToSave], { type: 'plain/text' });\n var a = document.createElement(\"a\"),\n url = URL.createObjectURL(newFile);\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(function () {\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }, 0);\n\n}\n\n\n\nloadFile() {\n let scopedUpdate = this.globalUpdateCode\n\n const input = document.getElementById('load');\n const file = input.files[0];\n var fileReader = new FileReader()\n\n fileReader.onload = function (fileLoadedEvent, context) {\n var textFromFileLoaded = fileLoadedEvent.target.result;\n scopedUpdate(textFromFileLoaded)\n return textFromFileLoaded;\n\n // globalUpdateCode(textFromFileLoaded);\n //document.getElementById(\"procs\").value = textFromFileLoaded;\n };\n fileReader.readAsText(file, \"UTF-8\");\n\n\n}\n\n\n\n}","import React, { useState } from 'react'\nconst Project = (props) => {\n\n const [deleting, setDeleting] = useState(false);\n\n const copyProjectLink = async (projectId) => {\n var data = `${process.env.REACT_APP_BASE_URL}/pr${projectId}`;\n navigator.clipboard.writeText(data).then(function () {\n }, function () {\n console.error(\"Unable to write to clipboard\");\n });\n }\n\n const convertDate = (dateString) => {\n if (dateString === undefined) { return false }\n let date = new Date(dateString);\n return `Last Save: ${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()}`\n }\n\n const lastSavedDate = convertDate(props.project.saved);\n\n return (\n <>\n {\n !deleting ?\n < div className=\"project\" style={{ marginTop: \"10px\", padding: \"5px\"}}>\n\n
{ props.getSingleProject(props.project.projectId) }}>\n {props.project.title}\n \n
\n
{lastSavedDate}
\n\n { setDeleting(true) }}>[delete]\n { copyProjectLink(`${props.project.projectId}`) }}>[copy link]\n\n \n :\n < div className=\"project\" style={{ marginTop: \"10px\", padding: \"4px\", border: '1px solid red', backgroundColor: 'rgba(0, 0, 0, .2)' }}>\n
\n Delete?\n \n
\n { props.deleteProject(props.project.projectId) }}>[delete]\n { setDeleting(false) }}>[cancel]\n \n\n\n }\n\n \n\n )\n}\n\nexport default Project;","import React, { useEffect, useState } from 'react';\nimport firebase from 'firebase/app'\nimport 'firebase/auth'\nimport '../../css/menus.css'\nimport Project from './Project';\n\nfunction UserMenu(props) {\n\n\n const [projectList, setProjectList] = useState(props.projectList);\n\n\n useEffect(() => {\n setProjectList(props.projectList);\n }, [props.projectList, props.networkError]);\n\n\n const menuStyle = {\n minWidth: '200px',\n maxHeight: '90vh',\n minHeight: 'calc(100vh - 50px)',\n paddingRight: '35px',\n paddingLeft: '5px',\n fontSize: \"1.2rem\",\n zIndex: 999,\n overflowY: 'auto',\n paddingBottom: '25px'\n }\n\n const signOut = () => {\n props.projects.writePidToStorage(false);\n props.projects.writeLastCodeToLocalStorage(false)\n localStorage.removeItem('username');\n firebase.auth().signOut();\n }\n\n\n const copyProjectLink = async (pid) => {\n var data = `${process.env.REACT_APP_BASE_URL}/pr${pid}`;\n navigator.clipboard.writeText(data).then(function () {\n }, function () {\n console.error(\"Unable to write to clipboard\");\n });\n }\n\n const convertDate = (dateString) => {\n if (dateString === undefined) { return false }\n let date = new Date(dateString);\n return `${date.getMonth() + 1}-${date.getDate()}-${date.getFullYear()} ${date.getHours()}:${date.getMinutes()}`\n }\n\n\n\n return (\n
\n\n

Sign Out

\n {props.networkError ?

Network error:
unable to load projects

: null}\n {\n projectList.map((project) =>\n \n )\n }\n\n {\n props.recoveryEntry ?\n
\n { props.loadRecoveredCode() }}\n style={{ marginRight: \"10px\" }}>Recovered Code
\n {convertDate(props.recoveryEntry.date)}\n
\n :\n null\n }\n
\n\n )\n\n}\n\nexport default UserMenu;","export const config = {\n // apiUrl: process.env.REACT_APP_CLOUD_API\t, //Change this value to api path when working in localhost\n apiUrl: 'https://ld090vut83.execute-api.us-west-1.amazonaws.com', //Change this value to api path when working in localhost\n firebase: {\n apiKey: \"AIzaSyBELlFvBiDtHID6Lo7pBKzDQ6tWL4kHAfs\",\n authDomain: \"lbym-8be59.firebaseapp.com\",\n projectId: \"lbym-8be59\",\n storageBucket: \"lbym-8be59.appspot.com\",\n messagingSenderId: \"67087581587\",\n appId: \"1:67087581587:web:ea96ee610de15eff7e2866\"\n }\n}\n","import { TypedUseSelectorHook, useDispatch, useSelector } from 'react-redux';\nimport type { RootState, AppDispatch } from './store';\n\n// Use throughout your app instead of plain `useDispatch` and `useSelector`\nexport const useAppDispatch = () => useDispatch();\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\n","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\", react-hooks/exhaustive-deps: off */\n\n//This has turned into a bit of a mess as more authentication and project management got created and shoved in here. \n//Good practice would be to move all of the non-rendering things into helper function files (project management, user management)\n//to properly isolate this. There's also a lot of prop dependency going on with UserMenu which can be moved out.\n\n\nimport React, { useEffect, useState } from 'react';\nimport '../css/styles.css';\nimport '../css/layout.css';\nimport Projects from './Projects.js';\nimport firebase from 'firebase/app'\nimport 'firebase/auth'\nimport { useAuth, useUser } from 'reactfire';\nimport axios from 'axios';\nimport UserMenu from './UserMenu/UserMenu';\nimport { config } from '../config';\n\nimport saveIcon from '../images/cloud-save.png';\nimport connectIcon from '../images/connect-icon.png';\nimport downloadIcon from '../images/download.png';\nimport newWindowIcon from '../images/new-window.png';\nimport newProjectIcon from '../images/newProject.png';\nimport uploadIcon from '../images/upload.png';\n\nimport { useAppSelector } from '../redux/hooks';\nimport { set, clear, selectProjectId } from '../redux/reducers/projectIdSlice';\nimport { store } from '../redux/store';\n\n\nfunction Header(props) {\n\n var projects;\n projects = new Projects();\n\n const userLogoStyle = {\n zIndex: 2,\n borderRadius: \"50%\",\n width: \"35px\",\n height: \"35px\",\n marginTop: \"8px\",\n backgroundColor: \"#1A74A3\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n position: \"absolute\",\n left: \"20px\",\n cursor: \"pointer\"\n }\n\n const loginStyle = {\n position: \"absolute\",\n left: \"20px\",\n top: \"17px\",\n width: \"35px\",\n height: \"35px\",\n cursor: \"pointer\"\n }\n\n const titleStyle = {\n position: \"absolute\",\n left: \"100px\",\n lineHeight: \"55px\",\n verticalAling: \"middle\"\n\n }\n\n const titleInputStyle = {\n border: \"none\",\n backgroundColor: \"transparent\",\n color: \"white\",\n fontSize: \"1.2em\"\n\n }\n\n const { data: user } = useUser();\n const reactAuth = useAuth();\n\n const projectId = useAppSelector(selectProjectId);\n\n const [projectList, setProjectList] = useState([]);\n const [userMenuShow, setUserMenuShow] = useState(false);\n const [projectAuthor, setProjectAuthor] = useState(null);\n const [recoveryEntry, setRecoveryEntry] = useState(false);\n const [projectLastSaved, setProjectLastSaved] = useState(false);\n const [lastUsername, setLastUsername] = useState(null);\n const [networkError, setNetworkError] = useState(false);\n\n //On mount, check to see if a project is defined in the URL.\n //All links have the format /pr${projectId}, so we check if 'pr' is the start of it and take the rest.\n //This way you can still use URLs like /settings or whatever in the future, you just can't start them with pr.\n\n //Also start the process that will check if we're online or not.\n //store.dispatch(load(parsedFile))\n\n\n useEffect(() => {\n //get stored username if there is one\n setLastUsername(localStorage.getItem('username'));\n\n if (window.location.pathname.substring(1) && window.location.pathname.substring(1, 3) === \"pr\") {\n store.dispatch(set(window.location.pathname.substring(3)));\n\n axios.get(`${config.apiUrl}/projects${window.location.pathname.substring(3)}`, {\n }).then(response => {\n console.log(response)\n if (response && response.data && response.data.code && response.data.title) {\n props.updateCode(response.data.code);\n document.getElementById('projectTitle').value = response.data.title;\n store.dispatch(set(response.data.projectId));\n setProjectAuthor(response.data.ownerDisplayName);\n\n } else {\n console.log(\"error\")\n }\n }).catch((err) => { console.log(err) })\n }\n },\n []\n )\n\n useEffect(() => {\n projects.writePidToStorage(projectId);\n }, [projectId])\n\n //run getUserProjects if user changes; meaning, we want to wait until the login loads\n //this is also where we check for recovery files\n useEffect(() => {\n\n //if user is logged in, save displayname and load cloud projects\n if (user && user.displayName) {\n localStorage.setItem(\"username\", user.displayName);\n getUserProjects();\n }\n\n\n projects.getRecoverEntry().then(recoveryProject => {\n\n\n\n if (recoveryProject && recoveryProject[0]) {\n\n //if code has been saved, provide it in the menu\n if (recoveryProject[0]['code']) {\n setRecoveryEntry(recoveryProject[0]);\n }\n\n //if there is a user (we don't care who at this time, but that might be a TODO) and a saved PID, open the PID\n if (user && recoveryProject[0].projectId) {\n //This item is cleared on signing out, so it's unlikely to open someone else's project. Not impossible though.\n getSingleProject(recoveryProject[0]['projectId']);\n\n\n\n }\n\n //if user isn't logged in and code exists, and we're not at a project URL, open recovery entry\n if (!user && recoveryProject[0]['code'] && window.location.pathname?.substr(1, 2) !== \"pr\") {\n props.updateCode(recoveryProject[0]['code'])\n props.updateCode(recoveryProject[0]['code'])\n document.getElementById(\"projectTitle\").value = \"Recovered\"\n }\n\n //if user is logged in, code exists, but cloud project wasn't open, load the code\n if (user && recoveryProject[0]['code'] && !recoveryProject[0]['projectId'] && window.location.pathname?.substr(1, 2) !== \"pr\") {\n props.updateCode(recoveryProject[0]['code'])\n props.updateCode(recoveryProject[0]['code'])\n document.getElementById(\"projectTitle\").value = \"Recovered\"\n }\n\n\n }\n //note: this runs on user change, which includes signing out, so it switches to 'recovery' mode. Which is a little weird.\n //Maybe TODO\n\n });\n\n },\n [user]\n );\n\n\n useEffect(() => {\n\n projects.initializeDatabase();\n\n setInterval(() => {\n\n let codeElement = document.getElementById('procs');\n if (codeElement != null) {\n projects.writeLastCodeToLocalStorage(codeElement.value);\n }\n\n }, 1000);\n\n\n },\n [],\n )\n\n function loadFile() {\n document.getElementById(\"load\").click();\n document.getElementById(\"procs\").focus();\n }\n\n function saveAs() {\n projects.saveAs(document.getElementById(\"projectTitle\").value);\n }\n\n function toggleNewProject() {\n props.toggleNewProjectModal();\n }\n\n const toggleUserMenu = () => {\n\n setUserMenuShow(!userMenuShow)\n\n }\n\n\n const signIn = async () => {\n await reactAuth.signInWithPopup(new firebase.auth.GoogleAuthProvider()).then(result => {\n if (result.user) {\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n axios.post(`${config.apiUrl}/login`, {\n displayName: result.user.displayName,\n email: result.user.email,\n version:'STEMACES'\n },{\n headers: {\n authorization: idToken\n }\n }).catch((err) => { console.log(err) })\n })\n }\n });\n };\n\n const convertDate = (dateString) => {\n if (dateString == undefined) { return false }\n let date = new Date(dateString);\n return `${date.getMonth() + 1}-${date.getDate()} ${date.getHours() < 10 ? '0' : ''}${date.getHours()}:${date.getMinutes() < 10 ? '0' : ''}${date.getMinutes()}`\n }\n\n\n const saveTitle = () => {\n var projectTitle = document.getElementById(\"projectTitle\").value;\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n\n if (projectId) {\n\n //not the first time - update an existing\n axios.patch(`${config.apiUrl}/project/${projectId}/title`, {\n userId: user.uid,\n title: projectTitle,\n projectId: projectId,\n },{\n headers: {\n authorization: idToken\n }\n }).then((response) => {\n //handle response\n getUserProjects();\n }).catch((error) => {\n console.log(error)\n })\n\n\n }\n })\n }\n\n const saveToCloud = () => {\n\n if (user) {\n\n var codeToSave = document.getElementById(\"procs\").value;\n var projectTitle = document.getElementById(\"projectTitle\").value;\n\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n\n if (!projectId) {\n\n //first time saving - we expect a response containing an ID\n\n axios.post(`${config.apiUrl}/project`, {\n userId: user.uid,\n title: projectTitle,\n code: codeToSave,\n dataMode: props.dataMode\n },{\n headers: {\n authorization: idToken\n }\n }).then((response) => {\n\n //We're being very confident and assuming that the response is a valid ID\n //in the future you'll want to add error handling here and validation\n //TODO\n\n setProjectLastSaved('Saved ' + convertDate(Date.now()))\n store.dispatch(set(response.data));\n getUserProjects();\n window.history.pushState({}, '', `/pr${response.data}`)\n }).catch((err) => { console.log(err); setProjectLastSaved('Error saving') })\n\n\n } else {\n\n //not the first time - update an existing\n axios.patch(`${config.apiUrl}/project/${projectId}`, {\n userId: user.uid,\n title: projectTitle,\n code: codeToSave,\n projectId: projectId,\n dataMode: props.dataMode\n },{\n headers: {\n authorization: idToken\n }\n }).then((response) => {\n if (response.status == 200) {\n setProjectLastSaved('Saved ' + convertDate(Date.now()))\n } else {\n setProjectLastSaved('Error saving')\n }\n\n getUserProjects();\n }).catch((error) => {\n console.log(error)\n setProjectLastSaved('Error saving');\n })\n\n\n }\n })\n\n }\n }\n\n const deleteProject = (pid) => {\n\n //needs to clear the current pid\n\n if (user && user.uid) {\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n\n axios.delete(`${config.apiUrl}/project/${pid}`, {\n headers: {\n authorization: idToken\n }\n })\n .then(response =>\n //we should check that the response is correct. TODO.\n {\n console.log(response)\n\n if (projectId == pid) {\n store.dispatch(clear())\n window.history.pushState({}, '', '/');\n }\n\n getUserProjects();\n\n }).catch((err) => { console.log(err) })\n })\n }\n }\n\n const loadRecoveredCode = () => {\n if (recoveryEntry.code) {\n props.updateCode(recoveryEntry.code);\n setUserMenuShow(false);\n setRecoveryEntry(false);\n }\n }\n\n const getSingleProject = (openPid) => {\n projects.writePidToStorage(openPid);\n\n setUserMenuShow(false);\n\n if (true\n //user && user.uid - check temporarily disabled\n ) {\n\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n axios.get(`${config.apiUrl}/project/${openPid}`, {\n headers: {\n authorization: idToken\n }\n }).then(response => {\n if (response && response.data && response.data.code && response.data.title) {\n props.updateCode(response.data.code);\n if (response.data.dataMode){\n props.setDataMode(response.data.dataMode); //new code for the two data tabs motion and normal\n }\n else{\n props.setDataMode('data'); //This accounts for projects saved prior to this change\n }\n var titleElement = document.getElementById('projectTitle');\n if (titleElement !== null) {\n titleElement.value = response.data.title;\n }\n setProjectLastSaved('Saved ' + convertDate(response.data.saved) || null)\n store.dispatch(set(response.data.projectId))\n window.history.pushState({}, '', `/pr${response.data.projectId}`)\n if (response.data.ownerDisplayName) {\n setProjectAuthor(response.data.ownerDisplayName);\n } else {\n setProjectAuthor(null);\n }\n\n } else {\n console.log(\"error\")\n }\n }).catch((err) => { console.log(err) })\n\n })\n\n }\n }\n\n\n const getUserProjects = () => {\n\n if (user) {\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n\n axios.get(`${config.apiUrl}/projects`, {\n headers: {\n authorization: idToken\n }\n })\n .then(response => {\n //we believe that response.data is an array of projects; this should do something different if there's an error\n if (response && response.data && Array.isArray(response.data)) {\n setProjectList(response.data)\n }\n\n\n }).catch((err) => { console.log(err); setNetworkError(true) })\n })\n }\n }\n\n\n\n\n //The render method for user:\n /*\n If user is undefined, that means it's loading; either show the lastUsername if it exists, or nothing since it's pending\n Next section: if 'user' exists, show the correct user and make the button work\n Last: if user == null or false, that means it's definitely not a signed in user, so show login. I'm not sure which falsy value it is,\n so that's why we use not undefined.\n\n I'm sure this could be more elegant\n \n */\n\n return (\n
\n \n {\n user === undefined && lastUsername ?\n\n
{ if (e.key == \"Enter\") { toggleUserMenu() } }} className=\"\" style={userLogoStyle}>\n

{lastUsername.substr(0, 1)}

\n
\n\n :\n\n <>\n\n }\n\n\n {user ?\n\n
{ if (e.key == \"Enter\") { toggleUserMenu() } }} className=\"\" style={userLogoStyle}>\n

{user.displayName.substr(0, 1) || 'te'}

\n
\n\n :\n <>\n {\n user !== undefined ?\n
\n { if (e.key == \"Enter\") { signIn() } }} tabIndex={0}>Login\n
\n :\n <>\n }\n\n \n\n }\n\n { store.dispatch(clear()); setProjectLastSaved(null) }} >\n { setProjectAuthor(null) }}>\n
\n { saveTitle() }}>\n {projectAuthor && user && projectAuthor !== user.displayName ? `By ${projectAuthor}` : null}\n {projectLastSaved ? projectLastSaved : null}\n
\n\n\n
toggleNewProject()} onKeyDown={(e) => { if (e.key == \"Enter\") { toggleNewProject() } }}>\n \"New\n New\n
\n
saveAs()} onKeyDown={(e) => { if (e.key == \"Enter\") { saveAs() } }}>\n \"Download\n Download\n
\n
loadFile()} onKeyDown={(e) => { if (e.key == \"Enter\") { loadFile() } }}>\n \"Upload\n Upload\n
\n
saveToCloud()} onKeyDown={(e) => { if (e.key == \"Enter\") { saveToCloud() } }}>\n \"Save\"\n Save\n
\n \n
\n \"Open\n Docs\n
\n
\n
\n \"Connect\n Connect\n
\n
\n \"Connect\n Disconnect\n
\n \n\n {user ?\n <>\n
{ setUserMenuShow(false) }}>
\n
{ e.stopPropagation() }} tabIndex={0}>\n\n \n
\n \n :\n\n null\n }\n\n
\n );\n\n}\n\nexport default Header;\n","import blank from '../experiments/Blank.logo';\nimport ModelMolecules from '../experiments/ModelMolecules.logo';\nimport BasicBoard from '../experiments/BasicBoard.logo';\nimport Motion from '../experiments/Motion.logo';\nimport LightShow from '../experiments/LightShow.logo';\nimport Position from '../experiments/Position.logo';\nimport Packets from '../experiments/PacketsNew.logo';\nimport IntroToSensors from '../experiments/IntroSensors.logo';\nimport FMDEV from '../experiments/fm_dev.logo';\n\nexport const experimentsList = [\n {\n name: \"Blank\",\n code: blank,\n view: 'main'\n },\n {\n name:\"Light Show\",\n code: LightShow,\n view: 'main'\n },\n {\n name: \"BasicBoard\",\n code: BasicBoard,\n view: 'main'\n },\n {\n name: \"Intro to Sensors\",\n code: IntroToSensors,\n view: 'data'\n },\n // {\n // name: \"Force & Motion\",\n // code: Motion,\n // view: 'motion'\n // },\n // {\n // name: \"Packets\",\n // code: Packets,\n // view: 'data'\n // },\n {\n name: \"Modeling Molecules\",\n code: ModelMolecules,\n view: 'main'\n },\n // {\n // name:\"Position\",\n // code: Position,\n // view: 'data'\n // },\n // {\n // name:\"(DEV) FM\",\n // code: FMDEV,\n // view: 'motion'\n // },\n];","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\", react-hooks/exhaustive-deps: off */\n\nimport React from 'react';\nimport { experimentsList } from '../data/experiments.js';\nimport { current } from '@reduxjs/toolkit';\nimport { store } from '../redux/store';\nimport { load } from '../redux/reducers/packetDataSlice';\n\nconst OpenDataModal = (props) => {\n\n const loadNewTemplate = (code, view) => {\n\n //the code is a static file, so we need to load the content and apply it\n var request = new XMLHttpRequest();\n request.open('GET', code, true);\n request.send(null);\n request.onreadystatechange = function () {\n if (request.readyState === 4 && request.status === 200) {\n props.updateCode(request.responseText);\n document.getElementById(\"projectTitle\").value = \"Untitled\"\n\n //TODO: This is a hack. We shouldn't do it. Look at how data flows and fix it.\n\n document.getElementById(\"dummyClickToClearPid\").click();\n document.getElementById('dummyClickToClearAuthor').click();\n\n if(view){\n if(props.currentDataMode == 'motion' && view == 'data'){\n store.dispatch(load([]));\n }\n else if(props.currentDataMode == 'data' && view == 'motion'){\n store.dispatch(load([]));\n }\n\n props.setView(view);\n props.setDataMode(view);\n }\n\n props.toggleModal();\n }\n }\n\n window.history.pushState({}, '', '/')\n }\n\n return (\n
props.toggleModal()}>\n
e.stopPropagation()}>\n props.toggleModal()}>×\n

New Project

\n
\n
\n {experimentsList.map(item => (\n { loadNewTemplate(item.code, item.view || null) }}>\n {item.name}\n
\n ))}\n
\n
\n \n )\n\n}\n\n\nexport default OpenDataModal;","/* eslint eqeqeq: \"off\", no-useless-escape: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\" */\n\n\nexport const options = {\n lineNumbers: false,\n scrollBeyondLastLine: false,\n readOnly: false,\n fontSize: 12,\n}\n\n// This config defines how the language is displayed in the editor.\n//Note: hyphens aren't valid as keywords, they need to be added below that\n\n\n//For the sake of auto-complete we're leaving the hyphenated ones under keywords\nexport const languageDef = {\n defaultToken: \"\",\n number: /\\d+(\\.\\d+)?/,\n keywords: [\n \"ir\",\n \"visible\",\n \"loadpic\",\n \"setcolor\",\n \"print\",\n \"readADC\",\n \"repeat\",\n \"dp2on\",\n \"dp3on\",\n \"dp4on\",\n \"dp5on\",\n \"dp6on\",\n \"dp7on\",\n \"dp8on\",\n \"dp9on\",\n \"dp10on\",\n \"dp11on\",\n \"dp12on\",\n \"dp2off\",\n \"dp3off\",\n \"dp4off\",\n \"dp5off\",\n \"dp6off\",\n \"dp7off\",\n \"dp8off\",\n \"dp9off\",\n \"dp10off\",\n \"dp11off\",\n \"dp12off\",\n \"make\",\n \"let\",\n \"fd\",\n \"rt\",\n \"arc\",\n \"penup\",\n \"pendown\",\n \"chartpush\",\n \"wait\",\n \"ob1on\",\n \"ob1off\",\n \"loop\",\n \"push\",\n \"mwait\",\n \"startfill\",\n \"endfill\",\n \"clean\",\n \"setpensize\",\n \"lt\",\n \"random2\",\n \"setshade\",\n \"setheading\",\n \"setxy\",\n \"gotoxy\",\n \"forward\",\n \"bk\",\n \"ht\",\n \"st\",\n \"hide\",\n \"show\",\n \"turtle\",\n 'limits',\n 'ticks',\n 'title',\n 'se',\n 'seth',\n 'clear',\n 'y-label',\n 'drawtext',\n 'readADCAsCelcius',\n //new stuff, should be camel case\n 'NowSeconds',\n 'NowMilli',\n 'ReceivePacket',\n 'RecieveMotionPacket',\n ],\n operators: [\n '=', '>', '<', '!', '~', '?', ':', '==', '<=', '>=', '!=',\n '&&', '||', '++', '--', '+', '-', '*', '/', '&', '|', '^', '%',\n '<<', '>>', '>>>', '+=', '-=', '*=', '/=', '&=', '|=', '^=',\n '%=', '<<=', '>>=', '>>>=', 'se'\n ],\n symbols: /[=> {\n if (chartRefSingle && chartRefSingle.current && chartRefSingle.current.chartInstance) {\n const base64image = chartRefSingle.current.chartInstance.toBase64Image();\n let filename = 'chart.png';\n var a = document.createElement('a');\n a.href = base64image;\n a.download = filename;\n a.click();\n }\n\n }\n\n\n return (\n
\n {props.chartType == \"single\" ?\n <>\n

{ downloadSingle() }} style={{ fontSize: '.8rem', padding: 0, margin: 0, position: 'absolute', top: '5px', left: '5px' }}>Download chart

\n \n \n :\n\n props.chartType == \"double\" ?\n <>\n\n
\n \n
\n\n
\n \n
\n \n\n : null\n\n }\n\n
\n )\n\n}\n\nexport default Chart;","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\", react-hooks/exhaustive-deps: off */\n\nimport React, { useState, useEffect } from 'react';\nimport axios from 'axios';\nimport { config } from '../config';\nimport { store } from '../redux/store';\nimport { load } from '../redux/reducers/packetDataSlice';\n\nconst OpenDataModal = (props) => {\n\n const [availableData, setAvailableData] = useState([]);\n\n useEffect(() => {\n\n axios.get(`${config.apiUrl}/data/${props.pid}`, {\n }).then(response => {\n if (response && response.data && Array.isArray(response.data)) {\n setAvailableData(response.data);\n }\n })\n\n },\n []\n )\n\n const getData = (index) => {\n axios.get(`${config.apiUrl}/data/single/${index}`, {\n }).then(response => {\n if (response && response.data) {\n\n store.dispatch(load(response.data.data));\n props.toggleModal();\n }\n })\n }\n\n const convertDate = (unixtime) => {\n\n //takes number, returns string\n const twoDigit = (input) => {\n if (input < 10) {\n return `0${input}`\n }\n return input;\n }\n\n let date = new Date(unixtime);\n //had to alter the below conversion for month because it was off by one, seems it was 0 based\n let converted = `${twoDigit(date.getMonth()+1)}-${twoDigit(date.getDate())}-${date.getFullYear()} ${twoDigit(date.getHours())}:${twoDigit(date.getMinutes())}:${twoDigit(date.getSeconds())}`;\n return converted;\n }\n\n\n return (\n
props.toggleModal()}>\n
e.stopPropagation()}>\n props.toggleModal()}>×\n

Load Data

\n
\n
\n {availableData.map(item => (\n
{ getData(item.dataId) }}>\n {convertDate(item.date)}
\n
\n ))}\n
\n
\n
\n )\n\n}\n\n\nexport default OpenDataModal;","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\" */\n\nimport React, { useState } from 'react';\nimport firebase from 'firebase/app';\n//we need firebase because we're saving data files to the cloud, and we want to authorize people\nimport axios from 'axios';\nimport { config } from '../config';\nimport OpenDataModal from './OpenDataModal';\nimport { useAppSelector } from '../redux/hooks';\nimport { store } from '../redux/store';\nimport { load } from '../redux/reducers/packetDataSlice';\nimport { selectProjectId } from '../redux/reducers/projectIdSlice';\nimport { selectData } from '../redux/reducers/packetDataSlice'\n\nfunction DataTable(props) {\n\n const packetData = useAppSelector(selectData);\n const projectId = useAppSelector(selectProjectId);\n const [dataModalOpen, setDataModalOpen] = useState(false);\n\n const toggleModal = () => {\n setDataModalOpen(!dataModalOpen);\n }\n\n function pickFile() {\n if (document.getElementById(\"loadData\") !== null) {\n document.getElementById(\"loadData\").click();\n }\n\n }\n\n function importData() {\n\n //In the current version of packets we expect 9 columns - Type, Time, ADC 0 - 5, Checksum. Even if all the sensors aren't used,\n //this is what we're looking for. CSV is comma deli... comma is used to separate the columns.\n\n var parsedFile = [];\n\n const input = document.getElementById(\"loadData\");\n const file = input.files[0];\n var fileReader = new FileReader();\n\n fileReader.onload = function (fileLoadedEvent) {\n var textFromFileLoaded = fileLoadedEvent.target.result;\n var textInLines = textFromFileLoaded.split(\"\\n\"); //create an array of lines\n textInLines.shift(); //remove header; we assume it exists but should probably check\n\n for (var line of textInLines) {\n var lineData = line.split(\",\");\n parsedFile.push(lineData);\n }\n\n store.dispatch(load(parsedFile))\n }\n\n fileReader.readAsText(file, \"UTF-8\");\n\n }\n\n function exportData() {\n var filename = \"data.csv\";\n var textToSave = \"Date,Time,Unix Time(ms),Lux,C,C,C\\n\";\n if (packetData) {\n for (var dataLine of packetData) {\n for (var i = 0; i < dataLine.length; i++) {\n if (i == 0) {\n textToSave += dataLine[0];\n } else {\n textToSave += \",\" + dataLine[i];\n }\n }\n textToSave += \"\\n\";\n\n }\n var newFile = new Blob([textToSave], { type: 'plain/text' });\n var a = document.createElement(\"a\"),\n url = URL.createObjectURL(newFile);\n a.href = url;\n a.download = filename;\n document.body.appendChild(a);\n a.click();\n setTimeout(function () {\n document.body.removeChild(a);\n window.URL.revokeObjectURL(url);\n }, 0);\n }\n\n }\n\n const saveToCloud = () => {\n firebase.auth().currentUser.getIdToken(false).then(idToken => {\n\n axios.post(`${config.apiUrl}/data/${projectId}`, {\n authorization: idToken,\n data: packetData,\n }).then((response) => {\n\n }).catch((err) => { console.log(err) })\n })\n }\n\n\n {/* I will probably end up removing this -- 1/15/2025 */}\n const [units, setUnits] = useState(true);\n\n const setUnitsState = () => {\n setUnits(!units);\n store.dispatch(load([]));\n }\n \n const clearPacketData = () => {\n store.dispatch(load([]));\n };\n\n\n let row = 0;\n return (\n
\n {dataModalOpen ? : null}\n \n \n Export\n importData()} style={{ display: \"none\" }} />\n Import\n {projectId && packetData ?\n <>\n Save\n { toggleModal() }} style={{ marginLeft: \"20px\", cursor: 'pointer' }}>Open\n \n :\n <>\n Save\n Open\n \n }\n \n clearPacketData()} style={{marginLeft: \"20px\", cursor: 'pointer' }}>Clear\n \n \n \n \n {/* */}\n \n \n \n \n \n \n \n \n \n \n {packetData.map(dataLine => {\n row++;//added to stop getting warnings about matching keys when time is the same (less than a second)\n return (\n \n {/* */}\n \n \n \n \n \n \n \n \n {/* The following 3 lines are being removed for the PLE in January 2025, will be put back after */}\n {/* */}\n {/* */}\n {/* */}\n \n )\n })}\n \n
TypeDateTimeUnix TimeLux°C°C°C
{dataLine[0]}{dataLine[0]}{dataLine[1]}{dataLine[2]}{dataLine[3]}{dataLine[4]}{dataLine[5]}{dataLine[6]}{dataLine[7]}{dataLine[7]}{dataLine[7]}
\n
\n )\n}\n\nexport default DataTable;","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\", react-hooks/exhaustive-deps: off */\n\nimport React, { useState, useEffect } from 'react';\nimport '../css/styles.css'\nimport { get } from 'http';\n\n//TODO: Handle ctrl + letter shortcuts from the interpreter class; consider cleaning up stuff; change print to end up here\n//styling, obviously, needs some work. Make it Ubuntu like. Plenty of tutorials tell you how.\n//Needs to fill the box.\n\nfunction Terminal(props) {\n\n\n const [terminalEntries, setTerminalData] = useState([]);\n const [terminalSelection, setTerminalSelection] = useState(0);\n let moved = false;\n let xpos;\n\n useEffect(() => {\n scrollToBottom(); \n //uncomment to get a bunch of test entries in terminal\n // document.getElementById(\"terminalData\").innerHTML = `test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
`\n })\n\n useEffect(() => {\n getSelectedLine()\n },\n [terminalSelection]\n );\n\n useEffect(() => {\n document.getElementById('prompt').addEventListener('paste', function(e) {\n e.preventDefault();\n let text = (e.originalEvent || e).clipboardData.getData('text/plain').replace(/\\n|\\r/g, \" \").substring(0, 125);\n document.execCommand(\"insertHTML\", false, text);\n });\n\n //when clicking on the terminal area, focus on the prompt unless movement is detected (highlighting text)\n \n let terminalWrapper = document.getElementById('terminal-wrapper');\n const setMovedTrue = (e) => {\n if((xpos - e.offsetX) > 5 || (xpos - e.offsetX) < -5){\n moved = true;\n }\n\n }\n\n const upListener = (e) => {\n if(!moved){\n document.getElementById('prompt').focus();\n } else {\n moved = false;\n }\n terminalWrapper.removeEventListener('mousemove', setMovedTrue);\n terminalWrapper.removeEventListener('mouseup', upListener);\n }\n\n terminalWrapper.addEventListener('mousedown', function(e) {\n xpos = e.offsetX;\n terminalWrapper.addEventListener('mousemove', setMovedTrue);\n terminalWrapper.addEventListener('mouseup', upListener);\n })\n\n }, [])\n\n\n function handleEnter() {\n\n var inputValue = document.getElementById(\"prompt\").innerText;\n setTerminalSelection(0);\n props.interpreter.runLine(inputValue);\n var newData = [...terminalEntries];\n newData.push(inputValue);\n document.getElementById(\"terminalData\").innerHTML += `${inputValue}`;\n setTerminalData(newData)\n\n document.getElementById(\"prompt\").innerHTML = \"\";\n\n scrollToBottom();\n }\n\n function scrollToBottom() {\n document.getElementById(\"terminalData\").scrollTop = document.getElementById(\"terminalData\").scrollHeight;\n }\n\n const divStyle = {\n height: \"calc(100% - 30px)\",\n width: \"100%\",\n overflowY: \"scroll\",\n overflowX: \"none\",\n fontFamily: \"'Courier New', monospace\",\n marginBottom: \"10px\",\n zIndex: 9999,\n\n }\n\n function getSelectedLine() {\n var entries = [...terminalEntries];\n entries.reverse();\n\n //there is an occasional off by one error happening; it's probably here\n if (terminalSelection > 0 && terminalSelection <= entries.length) {\n var selectedEntry = entries[terminalSelection - 1];\n if (selectedEntry) {\n document.getElementById(\"prompt\").innerHTML = selectedEntry;\n //put the cursor at the end of the line\n var range = document.createRange();\n var sel = window.getSelection();\n range.setStart(document.getElementById(\"prompt\").childNodes[0], selectedEntry.length);\n range.collapse(true);\n sel.removeAllRanges();\n sel.addRange(range);\n }\n } else if(terminalSelection - 1 < 0){\n document.getElementById(\"prompt\").innerHTML = \"\";\n setTerminalSelection(0);\n }\n }\n\n function handleKeyDown(e) {\n\n\n if (e.key == \"Enter\") {\n e.preventDefault();\n handleEnter();\n return;\n }\n\n if (e.key == \"ArrowUp\") {\n e.preventDefault();\n if(terminalSelection < terminalEntries.length){\n setTerminalSelection(terminalSelection + 1);\n }\n return;\n }\n\n if (e.key == \"ArrowDown\") {\n e.preventDefault();\n setTerminalSelection(terminalSelection - 1);\n return;\n }\n \n if (e.key == \"Escape\"){\n e.preventDefault();\n setTerminalSelection(0);\n return;\n }\n\n scrollToBottom();\n return;\n }\n\n //Note: the CC textarea isn't being used, but is referenced in 'interpreter'; keeping it here to prevent side effects of it not existing\n\n\n return (\n
\n\n
\n { handleKeyDown(e) }}>\n

\n \n
\n )\n\n}\n\nexport default Terminal;","/* eslint eqeqeq: \"off\", no-extend-native: \"off\", no-throw-literal: \"off\", no-use-before-define: \"off\", react-hooks/exhaustive-deps: off */\nimport React, { useEffect, useState } from 'react';\nimport './css/styles.css';\nimport './css/layout.css';\nimport Interpreter from './components/interpreter/Interpreter';\nimport Projects from './components/Projects.js';\nimport Header from './components/Header.js';\nimport NewProjectModal from './components/NewProjectModal';\nimport { languageDef, configuration } from './components/editorOptions'\nimport { includes } from './components/interpreter/includes.js';\nimport MonacoEditor from 'react-monaco-editor';\nimport Chart from './components/Chart';\nimport DataTable from './components/DataTable';\nimport Terminal from './components/Terminal';\nimport 'firebase/auth';\nimport twoPaneImg from './images/twopane.png';\nimport threePaneImg from './images/three-pane.png';\n//import { useUser } from 'reactfire';\n//import WorkerBuilder from './components/worker-builder';\n//import Worker from './components/logoWorker';\n\nimport MotionTable from './components/MotionTable';\nimport { set } from './redux/reducers/projectIdSlice';\n\nimport { store } from './redux/store';\nimport { load } from './redux/reducers/packetDataSlice';\n\nlet interpreter, projects;\n//let instance = new WorkerBuilder(Worker);\n\n\nconst App = () => {\n\n //const { data: user } = useUser();\n const [showNewProjectModal, setShowNewProjectModal] = useState(false);\n const [view, setView] = useState('main');\n const [code, setCode] = useState(`to go\n print 'Hello World'\nend`,);\n\n let editor = null;\n\n const [twoPane, setTwoPane] = useState(false)\n const [horizontalOffset, setHorizontalOffset] = useState(0);\n const [chartType, setChartType] = useState('');\n const [chartDataSingle, setChartDataSingle] = useState([]);\n const [chartDataTop, setChartDataTop] = useState([]);\n const [chartDataBottom, setChartDataBottom] = useState([]);\n const [chartOptionsTop, setChartOptionsTop] = useState({\n\n\n responsive: true,\n maintainAspectRatio: false,\n });\n\n const [chartOptionsBottom, setChartOptionsBottom] = useState({\n\n responsive: true,\n maintainAspectRatio: false,\n });\n const [chartOptionsSingle, setChartOptionsSingle] = useState({\n\n responsive: true,\n maintainAspectRatio: false,\n });\n\n\n\n useEffect(() => {\n setup();\n },\n []\n );\n\n\n const setup = () => {\n\n /*\n Web worker experiment\n *****\n instance.onmessage = (message) => {\n if (message) {\n console.log(\"Message from worker\", message.data);\n }\n };\n */\n\n\n\n\n console.log(\"Serial API Check:\", checkIfSerialCapable());\n\n setHorizontalOffset(document.getElementById(\"gutter\").getBoundingClientRect().left);\n\n interpreter = new Interpreter(\n {\n updateChartOptions: updateChartOptions,\n updateChartType: updateChartType,\n pushNewChartData: pushChartData,\n }\n );\n\n projects = new Projects(updateCode);\n interpreter.setup();\n\n window.onresize = interpreter.handleResize.bind(interpreter);\n\n const connectButton = document.getElementById('connectButton');\n const disconnectButton = document.getElementById('disconnectButton');\n\n if (connectButton !== null && disconnectButton !== null) {\n connectButton.addEventListener('keydown', (e) => { if (e.key == \"Enter\") { interpreter.openSerialPort.bind(interpreter) } });\n disconnectButton.addEventListener('keydown', (e) => { if (e.key == \"Enter\") { interpreter.disconnectSerialPort.bind(interpreter) } });\n\n connectButton.addEventListener('click', interpreter.openSerialPort.bind(interpreter));\n disconnectButton.addEventListener('click', interpreter.disconnectSerialPort.bind(interpreter));\n }\n\n //// this.setState({\n // includes: includes\n // });\n\n }\n\n const dragToResize = (e) => {\n\n e.preventDefault();\n\n function handleDrag(e) {\n interpreter.handleResizeHorizontal(e.clientX - horizontalOffset);\n }\n\n function handleMouseUp(e) {\n document.removeEventListener('mousemove', handleDrag)\n document.removeEventListener('mouseup', handleMouseUp)\n return;\n }\n\n document.addEventListener('mouseup', handleMouseUp)\n document.addEventListener('mousemove', handleDrag)\n }\n\n\n const updateChartType = (newType) => {\n setChartType(newType);\n }\n\n const updateChartOptions = (chartType, newOptions) => {\n if (chartType == \"single\") {\n setChartOptionsSingle(newOptions)\n }\n\n if (chartType == \"top\") {\n setChartOptionsTop(newOptions);\n }\n\n if (chartType == \"bottom\") {\n setChartOptionsBottom(newOptions);\n }\n\n }\n\n\n const pushChartData = (chartType, newData) => {\n if (chartType == \"single\") {\n setChartDataSingle(newData);\n return;\n }\n if (chartType == \"top\") {\n setChartDataTop(newData);\n return\n }\n if (chartType == \"bottom\") {\n setChartDataBottom(newData);\n return;\n }\n\n }\n\n const checkIfSerialCapable = () => {\n if ('serial' in navigator) {\n return true;\n } else {\n return false\n }\n }\n\n\n const updateCode = (newCode) => {\n setCode(newCode);\n }\n\n\n const toggleShowNewProjectModal = () => {\n setShowNewProjectModal(!showNewProjectModal);\n }\n\n\n const editorWillMount = monaco => {\n\n\n\n\n editor = monaco\n if (!monaco.languages.getLanguages().some(({ id }) => id === 'jslogo')) {\n // Register a new language\n monaco.languages.register({ id: 'jslogo' })\n // Register a tokens provider for the language\n monaco.languages.setMonarchTokensProvider('jslogo', languageDef)\n // Set the editing configuration for the language\n monaco.languages.setLanguageConfiguration('jslogo', configuration)\n\n\n }\n\n\n\n\n /*\n Updated Colors:\n [x]DarkBlue(Strings): 0b3a9a\n [x]BlueGreen(Pre-defined words): 0080a6\n []Green(Comments): 179847\n [x]Purple(commands): 7b44cd\n [x]Pink(start/end of word definitions): e234bb, D21EAB\n [x]Orange(Numbers): dc560d, CA4F0C\n [x]DarkGrey(Error): 5e5c5a\n Black(else): 000000\n */\n\n\n monaco.editor.defineTheme('jslogo', {\n base: 'vs', //vs-dark for dark theme, vs for light\n inherit: true,\n rules: [\n //Old color rules\n // { token: 'custom-words', foreground: 'd70087' }, //was FF7F7F, A80000. I like d70087\n // { token: 'numbers-custom', foreground: 'BD5500' }, //Currently setup to change number color, FFFD8A, BD5500\n // { token: 'compound-keywords', foreground: '005faf' }, //was 569cd6, 215987, 005faf\n // { token: 'error', foreground: 'D60000' }, //800080\n // { token: 'keywords-new', foreground: '8f53a1' },\n\n // Updated colors\n {token: 'strings-updated', foreground: '0b3a9a'},\n {token: 'predefined-words', foreground: '0080a6'},\n {token: 'comments', foreground: '179847'},\n {token: 'commands', foreground: '7b44cd'},\n {token: 'word-definition', foreground: 'D21EAB'},\n {token: 'numbers-custom', foreground: 'CA4F0C'},\n {token: 'error', foreground: '5e5c5a'},\n ],\n colors: {\n keywords: 'yellow'\n },\n });\n\n\n }\n\n\n\n\n const editorDidMount = (editor, monaco) => {\n editor.focus();\n }\n\n\n const options = {\n brackets: [\n [\"{\", \"}\"], [\"[\", \"]\"], [\"(\", \")\",]\n ],\n comments: {\n lineComment: \";\",\n },\n quickSuggestionsDelay: 500,\n selectOnLineNumbers: true,\n automaticLayout: true,\n minimap: {\n enabled: false\n },\n };\n\n const [dataMode, setDataMode] = useState('data'); //data or motion\n\n const handleDataChange = (mode) => {\n //set the date to either data or motion\n \n console.log('mode:', mode);\n console.log('dataMode:', dataMode);\n\n\n //I have to go to a meeting but there is definetly a way to squish these two if statements together.\n //Will revisit when I get back\n if (mode == 'motion' && dataMode == 'data' || mode == 'data' && dataMode == 'motion') {\n store.dispatch(load([]));\n }\n if(mode == 'data' || mode == 'motion'){\n setDataMode(mode);\n }\n setView(mode);\n }\n\n return (\n
\n \n\n
\n
\n {showNewProjectModal ?\n \n :\n null}\n
\n\n
    \n
  • { interpreter.runLine(\"go\") }} tabIndex=\"0\">Go
  • \n
\n
    \n
  • { if (e.key == \"Enter\" || !twoPane) { setView('main') } }} onClick={() => { if(!twoPane){setView('main'); interpreter.runLine(\"st\") }}} className={view == \"main\" ? \"activeButton\" : null} >Canvas
  • \n
  • { if (e.key == \"Enter\" || !twoPane) { setView('graph') } }} onClick={() => {if(!twoPane){setView('graph')}}} className={view == \"graph\" ? \"activeButton\" : null}>Plots
  • \n\n {dataMode == \"motion\" ? \n
  • { if (e.key == \"Enter\"|| !twoPane) { handleDataChange('motion') } }} onClick={() => {if(!twoPane){handleDataChange('motion')}}} className={view == \"motion\" ? \"activeButton\" : null}>Motion Data
  • \n :\n
  • { if (e.key == \"Enter\"|| !twoPane) { handleDataChange('data') } }} onClick={() => {if(!twoPane){handleDataChange('data')}}} className={view == \"data\" ? \"activeButton\" : null}>Data
  • \n }\n
\n
\n
\n { interpreter.showCanvas(); setTwoPane(false) }}\n onKeyDown={(e) => { if (e.key == \"Enter\") { interpreter.showCanvas(); setTwoPane(false) } }}\n tabIndex=\"0\"\n />\n { interpreter.hideCanvas(); setTwoPane(true) }}\n onKeyDown={(e) => { if (e.key == \"Enter\") { interpreter.hideCanvas(); setTwoPane(true) } }}\n tabIndex=\"0\"\n />\n\n
\n\n projects.loadFile()} style={{ display: \"none\" }} />\n\n
\n\n
\n
\n \n\n \n