198 lines
No EOL
5.4 KiB
JavaScript
198 lines
No EOL
5.4 KiB
JavaScript
/*
|
||
|
||
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 = "1FAIpQLSf_FBSe2K4lPEO3VHQCVSfkc6-lFe33O-dbp9cj6IjXQKTaOg";
|
||
const ENTRY_ID = "entry.1334848810";
|
||
const GOOGLE_SHEET_ID = "1nnNEU2B9tSyhp-gkxa_ug2M78WwLa2SdT7ZtgQbFYGc";
|
||
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 = `
|
||
<img src="${imgUrl}" alt="drawing">
|
||
<p>${timestamp}</p>
|
||
`;
|
||
gallery.appendChild(div);
|
||
}
|
||
});
|
||
} catch (error) {
|
||
console.error("Error fetching images:", error);
|
||
document.getElementById("gallery").textContent = "Failed to load images.";
|
||
}
|
||
}
|
||
|
||
fetchImages(); |