<!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>