1
0
forked from Mirror/wren
Files
wren/doc/site/static/wren.js
Chayim Refael Friedman accfa598b3 Allow people to share links to the playground (#1046)
* Allow people to share links to the playground

We do that by encoding the code (compressed) in the URL.

The compression is the same used in the TypeScript playground:
e9d8f66f6b/packages/sandbox/src/compilerOptions.ts (L119-L120)
2021-08-09 17:41:00 -07:00

103 lines
3.3 KiB
JavaScript

window.onload = function() {
var blocks = document.querySelectorAll('pre.snippet')
blocks.forEach((element) => {
var lang = 'lua'
var input_lang = element.getAttribute('data-lang')
if(input_lang) lang = input_lang
var code = document.createElement('code');
code.setAttribute('class', ' language-'+lang);
code.innerHTML = element.innerHTML;
element.innerHTML = '';
element.append(code)
});
Prism.highlightAll();
var try_code = document.querySelector("#try-code")
if(try_code) {
var jar_options = { tab: ' '.repeat(2) }
var jar = CodeJar(try_code, withLineNumbers(Prism.highlightElement), jar_options)
var output = document.querySelector("#try-output")
var result = document.querySelector("#try-result")
Module.print = function(text) { output.innerText += text + "\n"; }
Module.printErr = function(text) { output.innerText += text + "\n"; }
var run = document.querySelector("#try-run")
var share = document.querySelector("#share")
var hello = document.querySelector("#try-hello")
var fractal = document.querySelector("#try-fractal")
var loop = document.querySelector("#try-loop")
var copiedPopup = document.querySelector("#copied-popup p")
var compile = Module.cwrap('wren_compile', 'number', ['string'])
var set_input = (content) => {
output.innerText = '...';
result.removeAttribute('class');
result.innerText = 'no errors';
jar.updateCode(content);
}
share.onclick = (e) => {
var code = jar.toString()
var compressed = LZString.compressToEncodedURIComponent(code)
var url = location.protocol + "//" + location.host + location.pathname + "?code=" + compressed
navigator.clipboard.writeText(url).then(
() => {
copiedPopup.style.opacity = "1"
setTimeout(() => {
copiedPopup.style.opacity = ""
}, 1000)
},
(e) => console.error(e)
)
}
run.onclick = (e) => {
console.log("run")
output.setAttribute('ready', '');
output.innerText = '';
var res = compile(jar.toString())
var message = "no errors!"
result.removeAttribute('class');
if(res == 1) { //WREN_RESULT_COMPILE_ERROR
message = "Compile error!"
result.setAttribute('class', 'error');
} else if(res == 2) { //WREN_RESULT_RUNTIME_ERROR
message = "Runtime error!"
result.setAttribute('class', 'error');
}
result.innerText = message;
console.log(result);
}
hello.onclick = (e) => { set_input('System.print("hello wren")') }
loop.onclick = (e) => { set_input(`for (i in 1..10) System.print("Counting up %(i)")`); }
fractal.onclick = (e) => {
set_input(`for (yPixel in 0...24) {
var y = yPixel / 12 - 1
for (xPixel in 0...80) {
var x = xPixel / 30 - 2
var x0 = x
var y0 = y
var iter = 0
while (iter < 11 && x0 * x0 + y0 * y0 <= 4) {
var x1 = (x0 * x0) - (y0 * y0) + x
var y1 = 2 * x0 * y0 + y
x0 = x1
y0 = y1
iter = iter + 1
}
System.write(" .-:;+=xX$& "[iter])
}
System.print("")
}`);
} //fractal
var initial_code = new URLSearchParams(location.search).get("code")
if (initial_code !== null) {
initial_code = LZString.decompressFromEncodedURIComponent(initial_code)
set_input(initial_code)
}
} //if try_code
}