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();
});