About
Sign Up
Run
Check
main.py
Loading
<html> <head> <style> html, body { margin: 0; padding: 0; } div#glowscript { width: 100%; margin: 0 auto; text-align: center; } textarea#print { display: {{glowscriptTextarea}}; margin-top: 16px; margin-left: auto; margin-right: auto; } div#print-output { display: none; flex-direction: column; margin: 16px; padding: 8px; background-color: white; border: 1px solid #008aff; } </style> <link type="text/css" href="{{url}}/{{prefix}}components/{{path}}/css/redmond/IDE/jquery-ui.custom.css" rel="stylesheet" /> <link type="text/css" href="{{url}}/{{prefix}}components/{{path}}/css/ide.css" rel="stylesheet" /> <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.3/MathJax.js?config=TeX-AMS_HTML"></script> {{jqueryList}} <script type="text/javascript" src="{{url}}/{{prefix}}components/{{path}}/package/glow.{{version}}.min.js"></script> <script type="text/javascript" src="{{url}}/{{prefix}}components/{{path}}/package/RSrun.{{version}}.min.js"></script> <script type="text/javascript" src="{{url}}/{{prefix}}components/{{path}}/package/RScompiler.{{version}}.min.js"></script> </head> <body> <div id="loading">Loading your Web VPython program</div> <div id="glowscript"></div> <div id="print-output"></div> <script id="glowscript_source" type="text/plain">{{prog}}</script> <script type="text/javascript"> var prog = $('#glowscript_source').text() , compiled, main_func; // need to distinguish between 2.9 and < var floatVersion = parseFloat('{{version}}'); if ('{{runMode}}' === 'calculator' && ('{{version}}' === '3.2.2' || floatVersion > 3.2)) { $('#print-output').css('display', 'flex'); window.addEventListener('message', function(e) { var data; try { data = JSON.parse(e.data); } catch(e) {} if (data && data['glowscript.print']) { var s = data['glowscript.print']; $('#print-output').append(s + "<br>"); } }); } async function runProgram(program) { try { eval(program); await __main__(); } catch(err) { // todo: figure out why stack trace parsing doesn't work for newer version of GS var stack = reportScriptError(program, err, {{versionStringAdded}}); if (stack) { window.parent.postMessage(JSON.stringify({ "glowscript.error" : err.message + ' ' + stack, type : "runtime" }), "*"); } else { window.parent.postMessage(JSON.stringify({ "glowscript.error" : err.message, type : "runtime" }), "*"); } } } async function async_screenshot(scene) { // GlowScript 2.9 and later var img = await scene.__renderer.screenshot(); var targetSize = 270; var aspect = img.width / img.height; var w = aspect >= 1 ? targetSize : targetSize * aspect; var h = aspect >= 1 ? targetSize / aspect : targetSize; var cvs = document.createElement("canvas"); cvs.width = w; cvs.height = h; var cx = cvs.getContext('2d'); cx.drawImage(img, 0, 0, w, h); var snapshot = cvs.toDataURL(); window.parent.postMessage(JSON.stringify({ snapshot: snapshot }), "*"); } try { compiled = window.glowscript_compile(prog, { lang : '{{lang}}', version : '{{version}}' }); } catch(e) { window.parent.postMessage(JSON.stringify({ "glowscript.error" : e.message, type : "compile" }), "*"); } $("#loading").remove() window.__context = { glowscript_container : $('#glowscript') }; if (floatVersion >= 2.9) { runProgram(compiled); } else { if (compiled) { try { main_func = eval(compiled); window.userMain = main_func; if (window.userMain && typeof window.userMain === "function") { window.userMain(function(err) { if (err) { var stack = reportScriptError(compiled, err) if (stack) { window.parent.postMessage(JSON.stringify({ "glowscript.error" : err.message + ' ' + stack, type : "runtime" }), "*"); } else { window.parent.postMessage(JSON.stringify({ "glowscript.error" : err.message, type : "runtime" }), "*"); } } }); } } catch(err) { var stack = reportScriptError(compiled, err); if (stack) { window.parent.postMessage(JSON.stringify({ "glowscript.error" : err.message + ' ' + stack, type : "runtime" }), "*"); } else { window.parent.postMessage(JSON.stringify({ "glowscript.error" : err.message, type : "runtime" }), "*"); } } } } window.addEventListener('message', function(e) { if (e.data === "glowscript.snapshot") { var scene = window.scene; if (!scene) { for (var c = 0; c < canvas.activated.length; c++) { if (canvas.activated[c] !== null) { scene = canvas.activated[c]; break; } } } if (scene) { if (parseFloat('{{version}}') >= 2.9) { async_screenshot(scene); } else { (scene.__renderer || scene.renderer).screenshot(function (err, img) { if (!err) { $(img).load(function () { // Rescale the image to 128px max dimension and save it as a screenshot var targetSize = 270; var aspect = img.width / img.height; var w = aspect >= 1 ? targetSize : targetSize * aspect; var h = aspect >= 1 ? targetSize / aspect : targetSize; var canvas = document.createElement("canvas"); canvas.width = w; canvas.height = h; var cx = canvas.getContext('2d'); cx.drawImage(img, 0, 0, w, h); var snapshot = canvas.toDataURL("image/png"); window.parent.postMessage(JSON.stringify({ snapshot: snapshot }), "*"); }); } }); } } else { var glowscript_graph = $.find('.glowscript-canvas-wrapper canvas'); if (glowscript_graph[0] && typeof glowscript_graph[0].toDataURL == "function") { var snapshot = glowscript_graph[0].toDataURL("image/png"); window.parent.postMessage(JSON.stringify({ snapshot: snapshot }), "*"); } } } }); </script> </body> </html>