112 lines
4.8 KiB
HTML
112 lines
4.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" data-theme="black">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Undâr Compiler</title>
|
|
|
|
<script src="https://cdn.tailwindcss.com"></script>
|
|
<link href="https://cdn.jsdelivr.net/npm/daisyui@4/dist/full.min.css" rel="stylesheet" type="text/css" />
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/ace.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/mode-java.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/mode-forth.min.js"></script>
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.32.2/theme-monokai.min.js"></script>
|
|
</head>
|
|
<body class="min-h-screen bg-base-100 text-base-content">
|
|
|
|
<div class="navbar bg-base-100">
|
|
<div class="flex-1">
|
|
<a class="btn btn-ghost text-xl">Undâr Compiler</a>
|
|
</div>
|
|
<div class="flex-none">
|
|
<ul class="menu menu-horizontal px-1">
|
|
<li>
|
|
<select id="emitter" class="select select-bordered w-full max-w-xs">
|
|
<option value="1">Uxntal Emitter</option>
|
|
<option value="0" disabled>Reality Engine Emitter</option>
|
|
</select>
|
|
</li>
|
|
<li><a class="btn" href="https://wiki.xxiivv.com/etc/uxnrepl/" target="_blank">Uxntal repl</a></li>
|
|
<li>
|
|
<button id="compile-btn" class="btn btn-primary" disabled>
|
|
<span id="btn-text">Loading...</span>
|
|
<span id="btn-loading" class="loading loading-spinner loading-sm hidden"></span>
|
|
</button>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div class="container mx-auto p-4">
|
|
<div class="grid grid-cols-1 lg:grid-cols-2 gap-4 h-[calc(100vh-100px)]">
|
|
<div class="card bg-base-200 shadow-xl flex flex-col">
|
|
<div class="card-title p-4 pb-0">Source</div>
|
|
<div class="card-body flex-1 p-4 pt-2">
|
|
<div id="input" class="w-full h-full rounded-lg overflow-hidden border border-base-300"></div>
|
|
</div>
|
|
</div>
|
|
<div class="card bg-base-200 shadow-xl flex flex-col">
|
|
<div class="card-title p-4 pb-0">Output</div>
|
|
<div class="card-body flex-1 p-4 pt-2">
|
|
<div id="output" class="w-full h-full rounded-lg overflow-hidden border border-base-300"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
var inputEditor;
|
|
var outputEditor;
|
|
|
|
var Module = {
|
|
onRuntimeInitialized: function() {
|
|
const emitterEl = document.getElementById('emitter');
|
|
const compileBtn = document.getElementById('compile-btn');
|
|
const btnText = document.getElementById('btn-text');
|
|
const btnLoading = document.getElementById('btn-loading');
|
|
|
|
inputEditor = ace.edit("input");
|
|
inputEditor.session.setMode("ace/mode/java");
|
|
inputEditor.setTheme("ace/theme/monokai");
|
|
inputEditor.setOptions({ fontSize: "14px" });
|
|
|
|
outputEditor = ace.edit("output");
|
|
outputEditor.session.setMode("ace/mode/forth");
|
|
outputEditor.setTheme("ace/theme/monokai");
|
|
outputEditor.setReadOnly(true);
|
|
outputEditor.setOptions({ fontSize: "14px" });
|
|
|
|
btnText.innerText = "Compile";
|
|
compileBtn.disabled = false;
|
|
|
|
const compile = Module.cwrap('undar_compile', 'string', ['number', 'string']);
|
|
|
|
compileBtn.addEventListener('click', function() {
|
|
const sourceCode = inputEditor.getValue();
|
|
const emitterType = parseInt(emitterEl.value, 10);
|
|
|
|
btnText.classList.add("hidden");
|
|
btnLoading.classList.remove("hidden");
|
|
compileBtn.disabled = true;
|
|
outputEditor.setValue("Compiling...", -1);
|
|
|
|
setTimeout(() => {
|
|
try {
|
|
const result = compile(emitterType, sourceCode);
|
|
outputEditor.setValue((result === null) ? "Compilation Error" : result, -1);
|
|
} catch (e) {
|
|
outputEditor.setValue("WASM Runtime Error:\n" + e.message, -1);
|
|
} finally {
|
|
btnLoading.classList.add("hidden");
|
|
btnText.classList.remove("hidden");
|
|
compileBtn.disabled = false;
|
|
}
|
|
}, 50);
|
|
});
|
|
}
|
|
};
|
|
</script>
|
|
<script src="undar.js"></script>
|
|
</body>
|
|
</html> |