<form> <div> <label class="header-center"><b>Input</b></label> <br> <textarea rows="10" cols="70" id="script"></textarea> <div class="button-group"> <button onclick="executeScript(); return false;" class="demo-button">Run</button> <input type="checkbox" checked="true" class="demo-button" id="output-clear" /> <label for="output-clear">Clear Output</label> </div> </div> <div> <label class="header-center"><b>Output</b></label> <br> <textarea readonly rows="10" cols="70" id="output"></textarea> </div> </form> <!-- Styles for editor --> <style> .header-center { text-align: center; } .demo-button { padding: 7px 7px; vertical-align: middle; } .line-error { background: #e65f55; } </style> <!-- CodeMirror --> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.0/codemirror.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.0/addon/edit/matchbrackets.min.js"></script> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.0/codemirror.min.css" /> <!-- Luau Parser for CodeMirror --> <script src="assets/js/luau_mode.js"></script> <!-- CodeMirror Luau Editor (MUST BE LOADED AFTER CODEMIRROR!) --> <script> var editor = CodeMirror.fromTextArea(document.getElementById("script"), { theme: "default", mode: "luau", matchBrackets: true, lineNumbers: true, smartIndent: true, indentWithTabs: true, indentUnit: 4, }); editor.setValue("print(\"Hello World!\")\n"); editor.addKeyMap({ "Ctrl-Enter": function(cm) { executeScript(); }, "Shift-Tab": function (cm) { // dedent functionality cm.execCommand("indentLess"); } }); var lastError = undefined; function output(text) { var output_box = document.getElementById("output"); output_box.value += text.replace('stdin:', '') + "\n"; // scroll to bottom output_box.scrollTop = output_box.scrollHeight; } var Module = { 'print': function (msg) { output(msg) } }; function executeScript() { if (lastError) { editor.removeLineClass(lastError, "background", "line-error"); lastError = undefined; } var output_clear = document.getElementById("output-clear"); if (output_clear.checked) { var output_box = document.getElementById("output"); output_box.value = ''; } var err = Module.ccall('executeScript', 'string', ['string'], [editor.getValue()]); if (err) { var err_text = err.replace('stdin:', ''); output('Error:' + err_text); var err_line = parseInt(err_text); if (err_line) { lastError = editor.addLineClass(err_line-1, "background", "line-error"); } } } </script> <!-- Luau WASM (async fetch; should be the last line) --> <script async src="https://github.com/Roblox/luau/releases/latest/download/Luau.Web.js"></script>