/* FILL IN THESE VARIABLES BASED ON THE GUIDE AT https://drawbox.nekoweb.org IF YOU HAVE ANY QUESTION, SUGGESTIONS, OR NEED HELP, PLEASE EMAIL ME AT drawbox@jhorn.net OR @MONKEYBATION on DISCORD /`·.¸ /¸...¸`:· ¸.·´ ¸ `·.¸.·´) : © ):´; ¸ { `·.¸ `· ¸.·´\`·¸) `\\´´\¸.·´ */ const GOOGLE_FORM_ID = "1FAIpQLScbzFT1pxeIkp8yNB3fB7VD9V89Jbitr4h30Q3jXYjy54SlMQ"; const ENTRY_ID = "entry.258336726"; const GOOGLE_SHEET_ID = "16jUCXXinqztl3sFdtpWur9yFCAiASDsvmIsF3xHv-BU"; const DISPLAY_IMAGES = true; /* DONT EDIT BELOW THIS POINT IF YOU DONT KNOW WHAT YOU ARE DOING. */ const CLIENT_ID = "b4fb95e0edc434c"; const GOOGLE_SHEET_URL = "https://docs.google.com/spreadsheets/d/" + GOOGLE_SHEET_ID + "/export?format=csv"; const GOOGLE_FORM_URL = "https://docs.google.com/forms/d/e/" + GOOGLE_FORM_ID + "/formResponse"; let canvas = document.getElementById("drawboxcanvas"); let context = canvas.getContext("2d"); context.fillStyle = "white"; context.fillRect(0, 0, canvas.width, canvas.height); let restore_array = []; let start_index = -1; let stroke_color = "black"; let stroke_width = "2"; let is_drawing = false; function change_color(element) { stroke_color = element.style.background; } function start(event) { is_drawing = true; context.beginPath(); context.moveTo(getX(event), getY(event)); event.preventDefault(); } function draw(event) { if (!is_drawing) return; context.lineTo(getX(event), getY(event)); context.strokeStyle = stroke_color; context.lineWidth = stroke_width; context.lineCap = "round"; context.lineJoin = "round"; context.stroke(); event.preventDefault(); } function stop(event) { if (!is_drawing) return; context.stroke(); context.closePath(); is_drawing = false; restore_array.push(context.getImageData(0, 0, canvas.width, canvas.height)); start_index++; event.preventDefault(); } function getX(event) { return event.pageX ? event.pageX - canvas.offsetLeft : event.targetTouches[0].pageX - canvas.offsetLeft; } function getY(event) { return event.pageY ? event.pageY - canvas.offsetTop : event.targetTouches[0].pageY - canvas.offsetTop; } canvas.addEventListener("touchstart", start, false); canvas.addEventListener("touchmove", draw, false); canvas.addEventListener("touchend", stop, false); canvas.addEventListener("mousedown", start, false); canvas.addEventListener("mousemove", draw, false); canvas.addEventListener("mouseup", stop, false); canvas.addEventListener("mouseout", stop, false); function Restore() { if (start_index <= 0) { Clear(); } else { start_index--; restore_array.pop(); context.putImageData(restore_array[start_index], 0, 0); } } function Clear() { context.fillStyle = "white"; context.clearRect(0, 0, canvas.width, canvas.height); context.fillRect(0, 0, canvas.width, canvas.height); restore_array = []; start_index = -1; } context.drawImage = function() { console.warn("noo >:("); }; document.getElementById("submit").addEventListener("click", async function () { const submitButton = document.getElementById("submit"); const statusText = document.getElementById("status"); submitButton.disabled = true; statusText.textContent = "Uploading..."; const imageData = canvas.toDataURL("image/png"); const blob = await (await fetch(imageData)).blob(); const formData = new FormData(); formData.append("image", blob, "drawing.png"); try { const response = await fetch("https://api.imgur.com/3/image", { method: "POST", headers: { Authorization: `Client-ID ${CLIENT_ID}` }, body: formData, }); const data = await response.json(); if (!data.success) throw new Error("Imgur upload failed"); const imageUrl = data.data.link; console.log("Uploaded image URL:", imageUrl); const googleFormData = new FormData(); googleFormData.append(ENTRY_ID, imageUrl); await fetch(GOOGLE_FORM_URL, { method: "POST", body: googleFormData, mode: "no-cors", }); statusText.textContent = "Upload successful!"; alert("Image uploaded and submitted successfully ☻"); location.reload(); } catch (error) { console.error(error); statusText.textContent = "Error uploading image."; alert("Error uploading image or submitting to Google Form."); } finally { submitButton.disabled = false; } }); async function fetchImages() { if (!DISPLAY_IMAGES) { console.log("Image display is disabled."); return; } try { const response = await fetch(GOOGLE_SHEET_URL); const csvText = await response.text(); const rows = csvText.split("\n").slice(1); const gallery = document.getElementById("gallery"); gallery.innerHTML = ""; rows.reverse().forEach((row) => { const columns = row.split(","); if (columns.length < 2) return; const timestamp = columns[0].trim(); const imgUrl = columns[1].trim().replace(/"/g, ""); if (imgUrl.startsWith("http")) { const div = document.createElement("div"); div.classList.add("image-container"); div.innerHTML = ` drawing

${timestamp}

`; gallery.appendChild(div); } }); } catch (error) { console.error("Error fetching images:", error); document.getElementById("gallery").textContent = "Failed to load images."; } } fetchImages();