diff options
author | Özgür Kesim <oec@codeblau.de> | 2017-11-22 18:04:38 -0800 |
---|---|---|
committer | Özgür Kesim <oec@codeblau.de> | 2017-11-22 18:04:38 -0800 |
commit | 82bea0f74a212fe400429a04cc001a81b3ef5099 (patch) | |
tree | c5d208484761ada1fc8b90efaa3fc166849490b2 /index.html |
Initial upload
Diffstat (limited to 'index.html')
-rw-r--r-- | index.html | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/index.html b/index.html new file mode 100644 index 0000000..74d2c1b --- /dev/null +++ b/index.html @@ -0,0 +1,222 @@ +<!DOCTYPE html> +<!-- Author: Özgür Kesim <oec-go@kesim.org> 2017 --> +<html> + <head> + {{ $name := .Cur.Name }} + <title>playdot - {{$name}} online</title> + + <link rel="stylesheet" href="/static/codemirror.css"> + <script src="/static/codemirror.js"></script> + <script src="/static/{{$name}}.js"></script> +<style> +body { + height: 100vh; + width: 100%; + margin:0; + overflow:hidden; +} + +#top { + padding:10px; + margin:0px; + font-size:20px; + font-family:Sans-serif; + background: {{ .Cur.BgColor }}; +} + +#source { + height: 40vh; + width: 100%; + overflow:auto; +} + +#run { + margin: 10pt; +} + +#doc { + margin: 20px; + font-size: 9pt; +} + +#output { + width: 100%; + height: 50vh; + overflow:auto; +} + + +.on { + background:white; + color:{{.Cur.BgColor}}; + padding: 5px; +} + +svg { + padding: 5px; + // border: 2px solid lime; +} + +#link { + margin-left: 20px; +} + +.button { + background-color: {{ .Cur.BgColor }}; + border: none; + color: white; + padding: 7px 13px; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 16px; + margin: 4px 2px; + cursor: pointer; +} + +.error { + background-color: lightsalmon; +} +</style> + </head> + <body> + <div id="top">Tools: {{ range .Tools }} + {{ if eq .Name $name }} <span class="on">{{$name}}</span> {{ else }} <a href="/{{.Name}}">{{.Name}}</a> {{ end }} | + {{ end }} + </div> +<!-- + TODO: + - add download-button for output in other formats +--> + <textarea name="source" id="source"> +{{ .Cur.Example }} +</textarea> + <div id="mid"> + <button id="run" class="button" onclick="run()" title="or ctrl-enter in editor">run</button> + <button id="save" class="button" onclick="share()">share</button><span id="link"></span> + <input id="file" type="file" name="file" class="button"/> + <input id="scale" type ="range" min ="0.5" max="3" step ="0.1" value ="1"/> + <span id="doc"> + Documentation: + {{ range $link, $text := .Cur.Documentation }} + <a href="{{$link}}" target="_blank">{{$text}}</a> / + {{ end }} + </span> + </div> + <div id="output"></div> + <script> +var output = document.getElementById("output"); +var source = document.getElementById("source"); +var link = document.getElementById("link"); +var filein = document.getElementById("file"); +var scale = document.getElementById("scale"); + + +var editor = CodeMirror.fromTextArea(source, { + lineNumbers: true, + smartIndent: true, +}); + +window.onkeydown=function(e) { + if (e.ctrlKey && e.key == "Enter") { + e.preventDefault(); + run(); + } +} + +filein.onchange=function() { + var file = filein.files[0]; + var reader = new FileReader(); + reader.onload = function (e) { + editor.setValue(e.target.result); + }; + reader.readAsText(file); + window.location.hash=""; +} + +scale.onchange=function() { + var svg=output.querySelector("svg"); + var sc = scale.valueAsNumber; + if (svg) { + svg.height.baseVal.value = svg.viewBox.baseVal.height*sc; + svg.width.baseVal.value = svg.viewBox.baseVal.width*sc; + console.log("scale:", sc, "svg:", svg.height.baseVal.value, svg.width.baseVal.value); + } +} + +window.onhashchange = hashloc; + + +function run() { + var data = editor.getValue().trim(); + if (!data) return; + link.innerHtml = ""; + var req = new XMLHttpRequest(); + req.open("POST", "/{{$name}}/c", false); + req.onreadystatechange = function() { + switch (req.status) { + case 200: + output.innerHTML = req.responseText; + break; + case 400: + output.innerHTML = '<pre class="error">'+req.responseText+'</pre>'; + break; + } + } + req.send(data); +} + +function share() { + var data = editor.getValue(); + var req = new XMLHttpRequest(); + req.open("POST", "/{{$name}}/s", false); + req.onreadystatechange = function() { + switch (req.status) { + case 200: + link.innerHTML = "<i>saved as</i> <a href=\"/{{$name}}/#"+req.responseText+"!\">#"+req.responseText+"!</a>"; + document.title= "{{$name}}#"+req.responseText; + document.location.hash=req.responseText+"!"; + break; + case 400: + output.innerHTML = '<pre class="error">'+req.responseText+'</pre>'; + break; + } + } + req.send(data); +} + +function load(id) { + link.innerHtml = ""; + var req = new XMLHttpRequest(); + req.open("GET", "/{{$name}}/l/"+id, false); + req.onreadystatechange = function() { + switch (req.status) { + case 200: + editor.setValue(req.responseText); + break; + case 400: + editor.setValue(""); + output.innerHTML = '<pre class="error">'+req.responseText+'</pre>'; + break; + } + } + req.send(); +} + +function hashloc() { + var hash = window.location.hash; + if (hash) { + var parts = (hash.split('#')[1]).split('!'); + var id = parts[0]; + if (id) { + load(id); + document.title="{{$name}}#"+id; + if (parts.length > 1) run(); + } + } +} + +hashloc(); + </script> + </body> +</html> |