From 720d752748b793a2f5cf3cc14cb75ad86e8919c0 Mon Sep 17 00:00:00 2001 From: sillylaird Date: Tue, 3 Feb 2026 21:27:57 -0500 Subject: First commit --- guestbook.js | 127 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 guestbook.js (limited to 'guestbook.js') diff --git a/guestbook.js b/guestbook.js new file mode 100644 index 0000000..e13a614 --- /dev/null +++ b/guestbook.js @@ -0,0 +1,127 @@ +document.addEventListener("DOMContentLoaded", function() { + const form = document.getElementById('guestbook-form'); + const entriesContainer = document.getElementById('guestbook-entries'); + const captchaCanvas = document.getElementById('captcha-canvas'); + const refreshCaptchaButton = document.getElementById('refresh-captcha'); + const captchaInput = document.getElementById('captcha-input'); + const imageInput = document.getElementById('image'); + const GUESTBOOK_KEY = 'guestbookEntries'; + + let currentCaptcha = ''; + + // Function to generate a random CAPTCHA string + function generateCaptcha() { + const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; + let captcha = ''; + for (let i = 0; i < 6; i++) { + captcha += chars.charAt(Math.floor(Math.random() * chars.length)); + } + return captcha; + } + + // Function to draw CAPTCHA on canvas + function drawCaptcha(captcha) { + const ctx = captchaCanvas.getContext('2d'); + ctx.clearRect(0, 0, captchaCanvas.width, captchaCanvas.height); + ctx.font = '20px Arial'; + ctx.fillStyle = '#000'; + ctx.fillText(captcha, 10, 30); + } + + // Function to refresh the CAPTCHA image + function refreshCaptcha() { + currentCaptcha = generateCaptcha(); + drawCaptcha(currentCaptcha); + } + + // Load and display existing entries + function loadEntries() { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + entriesContainer.innerHTML = ''; + + entries.reverse().forEach((entry) => { + const entryElement = document.createElement('div'); + entryElement.className = 'entry'; + + const nameElement = document.createElement('h4'); + if (entry.name === 'Anonymous') { + nameElement.className = 'anonymous'; + } + nameElement.textContent = entry.name; + entryElement.appendChild(nameElement); + + const messageElement = document.createElement('p'); + messageElement.innerHTML = formatMessage(entry.message); + entryElement.appendChild(messageElement); + + if (entry.image) { + const imageElement = document.createElement('img'); + imageElement.src = entry.image; + entryElement.appendChild(imageElement); + } + + entriesContainer.appendChild(entryElement); + }); + } + + // Format message: add green text for lines starting with '>' + function formatMessage(message) { + return message.split('\n').map(line => { + if (line.startsWith('>')) { + return `${line}`; + } + return line; + }).join('
'); + } + + // Handle form submission + form.addEventListener('submit', function(event) { + event.preventDefault(); + + // Set default name to "Anonymous" if the name field is empty + let name = document.getElementById('name').value.trim(); + if (!name) { + name = 'Anonymous'; + } + + const message = document.getElementById('message').value.trim(); + const captchaValue = captchaInput.value.trim(); + const imageFile = imageInput.files[0]; + + if (name && message && captchaValue === currentCaptcha) { + const entries = JSON.parse(localStorage.getItem(GUESTBOOK_KEY)) || []; + + if (imageFile) { + const reader = new FileReader(); + reader.onload = function() { + const image = reader.result; + entries.unshift({ name, message, image }); + localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries)); + + form.reset(); // Clear the form fields + document.getElementById('name').value = 'Anonymous'; // Reset the name field to "Anonymous" + loadEntries(); // Refresh the entries display + refreshCaptcha(); // Generate a new CAPTCHA after successful submission + }; + reader.readAsDataURL(imageFile); + } else { + entries.unshift({ name, message, image: null }); + localStorage.setItem(GUESTBOOK_KEY, JSON.stringify(entries)); + + form.reset(); // Clear the form fields + document.getElementById('name').value = 'Anonymous'; // Reset the name field to "Anonymous" + loadEntries(); // Refresh the entries display + refreshCaptcha(); // Generate a new CAPTCHA after successful submission + } + } else { + alert('CAPTCHA is incorrect. Please try again.'); + } + }); + + // Refresh CAPTCHA on page load and on refresh button click + refreshCaptcha(); + refreshCaptchaButton.addEventListener('click', refreshCaptcha); + + // Initial load + loadEntries(); +}); \ No newline at end of file -- cgit v1.2.3