function copyText(text) { var tempInput = document.createElement("textarea"); tempInput.style = "position: absolute; left: -1000px; top: -1000px"; tempInput.value = text; document.body.appendChild(tempInput); tempInput.select(); document.execCommand("copy"); document.body.removeChild(tempInput); } var app = (function(){ var exported = {}; var stack = []; var env = {}; var vals = {}; var codeElem, inputElem, runCodeElem, stackOutput, errElem; exported.load = function() { codeElem = elmID("current-code"); inputElem = elmID("repl"); runCodeElem = elmID("run-code"); stackOutput = elmID("stack-output"); errElem = elmID("error-output"); codeElem.value = localStorage.getItem("code") || ""; // Clear loading indicators codeElem.className = ""; runCodeElem.className = ""; runCodeElem.value = "Run Code"; runCodeElem.onclick = function() { localStorage.setItem("code", codeElem.value); runCode(codeElem.value); return false; }; inputElem.onkeypress = function(event) { if (event.keyCode != 13 /*Enter*/) { return; } var code = inputElem.value; inputElem.value = "Executing code..."; runCode(code); inputElem.value = ""; return false; }; } function runCode(code) { errElem.innerHTML = ""; errElem.className = "hidden"; try { tin_run(code, stack, env, vals); } catch(ex) { errElem.innerHTML = ex.message; errElem.className = "error"; } displayStack(); } function cleanStackDisplay(str) { return str. replace(/>/g, ">"). replace(/"); } function displayStack() { var builtHTML = ""; for (var i = 0; i < stack.length; i++) { var dropNum = i; builtHTML += "" + cleanStackDisplay((stack[i] || "falsy").toString()) + "" + "<" + typeof(stack[i]) + ">" + 'Remove' + 'Copy' ""; } stackOutput.innerHTML = builtHTML; } exported.clearStack = function() { stack = []; displayStack(); } exported.copyStackElem = function(idx) { var valToCopy = stack[idx].toString(); copyText(valToCopy); } exported.removeStackElem = function(idx) { stack.splice(idx, 1); displayStack(); } function elmID(id) { return document.getElementById(id); } return exported; })(); window.onload = app.load;