Pathl.Stona/templates/editor.html

170 lines
3.7 KiB
HTML
Raw Normal View History

2026-01-30 17:08:36 +00:00
<!DOCTYPE html>
<html lang="pl">
<head>
<meta charset="UTF-8">
<title>MKScript Editor {{model_name}}</title>
<!-- CodeMirror CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/codemirror.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/theme/dracula.min.css">
<style>
body {
background: #282a36;
color: #f8f8f2;
font-family: 'Fira Code', monospace;
margin: 0;
padding: 20px;
}
h2 {
text-align: center;
color: #50fa7b;
margin-bottom: 15px;
}
button {
margin: 5px 5px 5px 0;
padding: 8px 16px;
border: none;
border-radius: 6px;
cursor: pointer;
background: #6272a4;
color: #f8f8f2;
font-weight: bold;
transition: 0.2s;
}
button:hover {
background: #50fa7b;
color: #282a36;
}
#editor-container {
margin-top: 10px;
border-radius: 8px;
overflow: hidden;
border: 1px solid #6272a4;
}
.CodeMirror {
height: 400px;
font-size: 14px;
line-height: 1.5;
}
.panel {
margin-top: 20px;
background: #44475a;
padding: 10px;
border-radius: 6px;
overflow-x: auto;
}
.panel h3 {
margin: 0 0 5px 0;
font-size: 14px;
color: #ff79c6;
}
#output, #debug {
white-space: pre-wrap;
color: #f1fa8c;
}
</style>
</head>
<body>
<h2>MKScript Editor {{model_name}}</h2>
<div>
<button onclick="run()">▶ Uruchom</button>
<button onclick="check()">✓ Sprawdź</button>
<button onclick="downloadFile()">💾 Pobierz</button>
<!-- Wczytywanie pliku -->
<input type="file" id="upload" accept=".ql" onchange="uploadFile()">
<a href="/" style="color:#50fa7b; margin-left: 10px;">← Wróć</a>
</div>
<div id="editor-container">
<textarea id="code">
use mk;
int a = 5;
int b = 10;
int c = mk.add(a, b);
print(c);
</textarea>
</div>
<div class="panel">
<h3>Console Output</h3>
<pre id="output"></pre>
</div>
<div class="panel">
<h3>Debugger (zmienne)</h3>
<pre id="debug"></pre>
</div>
<!-- CodeMirror JS -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/codemirror.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.9/mode/python/python.min.js"></script>
<script>
const editor = CodeMirror.fromTextArea(document.getElementById("code"), {
lineNumbers: true,
mode: "python",
theme: "dracula",
matchBrackets: true,
indentUnit: 4,
tabSize: 4,
autofocus: true
});
async function run() {
const code = editor.getValue();
const res = await fetch("/run_script", {
method: "POST",
headers: {"Content-Type":"application/json"},
body: JSON.stringify({code})
});
const data = await res.json();
if(data.error){
document.getElementById("output").textContent = "ERROR: "+data.error;
document.getElementById("debug").textContent = "";
}else{
document.getElementById("output").textContent = data.output.join("\n");
document.getElementById("debug").textContent = JSON.stringify(data.variables,null,2);
}
}
function check(){
const code = editor.getValue();
if(!code.includes(";")) alert("Brak średników ;");
else alert("Składnia OK ✔");
}
function downloadFile(){
const blob = new Blob([editor.getValue()], {type:"text/plain"});
const a = document.createElement("a");
a.href = URL.createObjectURL(blob);
a.download = "{{model_name}}.ql";
a.click();
}
function uploadFile(){
const file = document.getElementById("upload").files[0];
if(!file) return;
const form = new FormData();
form.append("file", file);
fetch("/upload_script", {method:"POST", body:form})
.then(r => r.text())
.then(alert);
}
</script>
</body>
</html>