|
|
|
|
|
|
|
|
const canvas = document.getElementById("canvas");
|
|
|
const ctx = canvas.getContext("2d");
|
|
|
let drawing = false;
|
|
|
|
|
|
canvas.addEventListener("mousedown", () => (drawing = true));
|
|
|
canvas.addEventListener("mouseup", () => (drawing = false));
|
|
|
canvas.addEventListener("mousemove", draw);
|
|
|
|
|
|
function draw(e) {
|
|
|
if (!drawing) return;
|
|
|
ctx.lineWidth = 4;
|
|
|
ctx.lineCap = "round";
|
|
|
ctx.strokeStyle = "#000";
|
|
|
ctx.lineTo(e.offsetX, e.offsetY);
|
|
|
ctx.stroke();
|
|
|
ctx.beginPath();
|
|
|
ctx.moveTo(e.offsetX, e.offsetY);
|
|
|
}
|
|
|
|
|
|
document.getElementById("clear").addEventListener("click", () => {
|
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
|
});
|
|
|
|
|
|
document.getElementById("convert").addEventListener("click", async () => {
|
|
|
const image = canvas.toDataURL("image/png");
|
|
|
const response = await fetch("/scribble/convert", {
|
|
|
method: "POST",
|
|
|
headers: { "Content-Type": "application/json" },
|
|
|
body: JSON.stringify({ image }),
|
|
|
});
|
|
|
|
|
|
const data = await response.json();
|
|
|
if (data.latex) {
|
|
|
document.getElementById("result-box").style.display = "block";
|
|
|
document.getElementById("latex-output").value = data.latex;
|
|
|
} else {
|
|
|
alert("Error generating LaTeX.");
|
|
|
}
|
|
|
});
|
|
|
|
|
|
document.getElementById("copy").addEventListener("click", () => {
|
|
|
const textarea = document.getElementById("latex-output");
|
|
|
textarea.select();
|
|
|
document.execCommand("copy");
|
|
|
alert("✅ LaTeX code copied!");
|
|
|
});
|
|
|
|