|
|
<!DOCTYPE html> |
|
|
<html lang="en"> |
|
|
<head> |
|
|
<meta charset="UTF-8"> |
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"> |
|
|
<title>Support Our Cause | Donate Today</title> |
|
|
<script src="https://cdn.tailwindcss.com"></script> |
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> |
|
|
<style> |
|
|
.donation-option { |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
.donation-option:hover { |
|
|
transform: translateY(-3px); |
|
|
} |
|
|
.donation-option.selected { |
|
|
box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.5); |
|
|
} |
|
|
.progress-bar { |
|
|
height: 6px; |
|
|
transition: width 0.5s ease; |
|
|
} |
|
|
.input-highlight { |
|
|
transition: all 0.3s ease; |
|
|
} |
|
|
.input-highlight:focus-within { |
|
|
box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.5); |
|
|
} |
|
|
.floating-label { |
|
|
transition: all 0.2s ease; |
|
|
transform-origin: left center; |
|
|
} |
|
|
.input-field:focus + .floating-label, |
|
|
.input-field:not(:placeholder-shown) + .floating-label { |
|
|
transform: translateY(-24px) scale(0.85); |
|
|
color: #3b82f6; |
|
|
} |
|
|
.toast { |
|
|
position: fixed; |
|
|
top: 20px; |
|
|
right: 20px; |
|
|
padding: 15px 25px; |
|
|
border-radius: 8px; |
|
|
box-shadow: 0 4px 12px rgba(0,0,0,0.15); |
|
|
z-index: 1000; |
|
|
transform: translateX(200%); |
|
|
transition: transform 0.3s ease; |
|
|
} |
|
|
.toast.show { |
|
|
transform: translateX(0); |
|
|
} |
|
|
.toast.success { |
|
|
background-color: #48bb78; |
|
|
color: white; |
|
|
} |
|
|
.toast.error { |
|
|
background-color: #f56565; |
|
|
color: white; |
|
|
} |
|
|
</style> |
|
|
</head> |
|
|
<body class="bg-gray-50 min-h-screen"> |
|
|
|
|
|
<div id="toast" class="toast hidden"></div> |
|
|
|
|
|
<div class="max-w-4xl mx-auto px-4 py-12"> |
|
|
|
|
|
<div class="mb-8"> |
|
|
<div class="flex justify-between items-center mb-2"> |
|
|
<span class="text-sm font-medium text-gray-700">Donation Progress</span> |
|
|
<span class="text-sm font-medium text-gray-700">65% to goal</span> |
|
|
</div> |
|
|
<div class="w-full bg-gray-200 rounded-full h-2.5"> |
|
|
<div class="progress-bar bg-blue-600 rounded-full" style="width: 65%"></div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="text-center mb-10"> |
|
|
<h1 class="text-4xl font-bold text-gray-900 mb-3">Make a Difference Today</h1> |
|
|
<p class="text-xl text-gray-600 max-w-2xl mx-auto">Your gift changes lives. Every donation helps us provide food, shelter, and education to those in need.</p> |
|
|
</div> |
|
|
|
|
|
<div class="flex flex-col lg:flex-row gap-8"> |
|
|
|
|
|
<div class="lg:w-2/3"> |
|
|
<div class="bg-white rounded-xl shadow-md overflow-hidden p-6"> |
|
|
|
|
|
<div class="mb-8"> |
|
|
<h2 class="text-xl font-semibold text-gray-800 mb-4">Select Donation Amount</h2> |
|
|
<div class="grid grid-cols-2 sm:grid-cols-4 gap-3 mb-4"> |
|
|
<button class="donation-option bg-white border border-gray-300 rounded-lg py-4 px-2 text-center font-medium hover:bg-gray-50" data-amount="10"> |
|
|
$10 |
|
|
</button> |
|
|
<button class="donation-option bg-white border border-gray-300 rounded-lg py-4 px-2 text-center font-medium hover:bg-gray-50" data-amount="25"> |
|
|
$25 |
|
|
</button> |
|
|
<button class="donation-option bg-blue-50 border-2 border-blue-500 rounded-lg py-4 px-2 text-center font-medium text-blue-700 selected" data-amount="50"> |
|
|
$50 |
|
|
</button> |
|
|
<button class="donation-option bg-white border border-gray-300 rounded-lg py-4 px-2 text-center font-medium hover:bg-gray-50" data-amount="100"> |
|
|
$100 |
|
|
</button> |
|
|
</div> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="number" id="customAmount" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none"> |
|
|
<label for="customAmount" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">Custom Amount ($)</label> |
|
|
<div class="absolute right-3 top-3 text-gray-500">USD</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="mb-8"> |
|
|
<h2 class="text-xl font-semibold text-gray-800 mb-4">Donation Frequency</h2> |
|
|
<div class="grid grid-cols-2 gap-3"> |
|
|
<button id="oneTimeBtn" class="bg-blue-600 text-white py-3 px-4 rounded-lg font-medium">One-Time</button> |
|
|
<button id="recurringBtn" class="bg-white border border-gray-300 text-gray-700 py-3 px-4 rounded-lg font-medium hover:bg-gray-50">Monthly</button> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="mb-8"> |
|
|
<h2 class="text-xl font-semibold text-gray-800 mb-4">Payment Information</h2> |
|
|
<div class="space-y-4"> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="text" id="cardName" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none"> |
|
|
<label for="cardName" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">Name on Card</label> |
|
|
</div> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="text" id="cardNumber" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none" maxlength="19"> |
|
|
<label for="cardNumber" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">Card Number</label> |
|
|
<div class="absolute right-3 top-3 text-gray-500"> |
|
|
<i class="fab fa-cc-visa"></i> |
|
|
<i class="fab fa-cc-mastercard ml-1"></i> |
|
|
<i class="fab fa-cc-amex ml-1"></i> |
|
|
</div> |
|
|
</div> |
|
|
<div class="grid grid-cols-2 gap-4"> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="text" id="cardExpiry" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none" maxlength="5"> |
|
|
<label for="cardExpiry" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">MM/YY</label> |
|
|
</div> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="text" id="cardCvv" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none" maxlength="4"> |
|
|
<label for="cardCvv" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">CVV</label> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="mb-8"> |
|
|
<h2 class="text-xl font-semibold text-gray-800 mb-4">Your Information</h2> |
|
|
<div class="space-y-4"> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="text" id="fullName" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none"> |
|
|
<label for="fullName" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">Full Name</label> |
|
|
</div> |
|
|
<div class="input-highlight relative border border-gray-300 rounded-lg p-1"> |
|
|
<input type="email" id="email" placeholder=" " class="input-field w-full py-3 px-4 rounded-lg focus:outline-none"> |
|
|
<label for="email" class="floating-label absolute left-4 top-3 text-gray-500 pointer-events-none">Email Address</label> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="mb-8"> |
|
|
<div class="flex items-start mb-4"> |
|
|
<div class="flex items-center h-5"> |
|
|
<input id="dedication" type="checkbox" class="w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"> |
|
|
</div> |
|
|
<label for="dedication" class="ml-3 text-sm text-gray-700">Dedicate this donation (add a message)</label> |
|
|
</div> |
|
|
<div id="dedicationMessageContainer" class="hidden mt-2"> |
|
|
<textarea id="dedicationMessage" class="w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500" placeholder="Your dedication message..."></textarea> |
|
|
</div> |
|
|
<div class="flex items-start"> |
|
|
<div class="flex items-center h-5"> |
|
|
<input id="newsletter" type="checkbox" checked class="w-4 h-4 text-blue-600 border-gray-300 rounded focus:ring-blue-500"> |
|
|
</div> |
|
|
<label for="newsletter" class="ml-3 text-sm text-gray-700">Receive updates about our work (you can unsubscribe anytime)</label> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="border-t pt-6"> |
|
|
<div class="flex flex-col sm:flex-row justify-between items-center gap-4 mb-6"> |
|
|
<div class="flex items-center space-x-2"> |
|
|
<i class="fas fa-lock text-green-600"></i> |
|
|
<span class="text-sm text-gray-600">Secure payment processing</span> |
|
|
</div> |
|
|
<div class="flex space-x-4"> |
|
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/b/b7/MasterCard_Logo.svg/2560px-MasterCard_Logo.svg.png" class="h-6" alt="Mastercard"> |
|
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/5/5e/Visa_Inc._logo.svg/2560px-Visa_Inc._logo.svg.png" class="h-6" alt="Visa"> |
|
|
<img src="https://upload.wikimedia.org/wikipedia/commons/thumb/3/39/PayPal_logo.svg/2560px-PayPal_logo.svg.png" class="h-6" alt="PayPal"> |
|
|
</div> |
|
|
</div> |
|
|
<button id="donateBtn" class="w-full bg-green-600 hover:bg-green-700 text-white font-bold py-4 px-6 rounded-lg text-lg transition duration-200 transform hover:scale-105"> |
|
|
Donate Now <i class="fas fa-heart ml-2"></i> |
|
|
</button> |
|
|
<p class="text-xs text-gray-500 mt-3 text-center">Your donation is tax-deductible as allowed by law. <a href="#" class="text-blue-600 hover:underline">Privacy Policy</a></p> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="lg:w-1/3"> |
|
|
<div class="bg-white rounded-xl shadow-md overflow-hidden sticky top-6"> |
|
|
<div class="bg-blue-600 text-white p-4"> |
|
|
<h3 class="font-bold text-lg">Your Donation Summary</h3> |
|
|
</div> |
|
|
<div class="p-6"> |
|
|
<div class="flex justify-between items-center mb-4"> |
|
|
<span class="text-gray-600">Amount:</span> |
|
|
<span id="summaryAmount" class="font-bold text-gray-900">$50.00</span> |
|
|
</div> |
|
|
<div class="flex justify-between items-center mb-4"> |
|
|
<span class="text-gray-600">Frequency:</span> |
|
|
<span id="summaryFrequency" class="font-bold text-gray-900">One-Time</span> |
|
|
</div> |
|
|
<div class="border-t border-gray-200 my-4"></div> |
|
|
<div class="flex justify-between items-center mb-2"> |
|
|
<span class="text-gray-600">Total:</span> |
|
|
<span id="summaryTotal" class="font-bold text-xl text-gray-900">$50.00</span> |
|
|
</div> |
|
|
<p class="text-sm text-gray-500 mt-4">Thank you for your generosity! Your support makes a real difference.</p> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="mt-6 bg-white rounded-xl shadow-md overflow-hidden"> |
|
|
<div class="bg-green-600 text-white p-4"> |
|
|
<h3 class="font-bold text-lg">Your Impact</h3> |
|
|
</div> |
|
|
<div class="p-6"> |
|
|
<div class="flex items-start mb-4"> |
|
|
<div class="bg-green-100 p-3 rounded-full mr-4"> |
|
|
<i class="fas fa-utensils text-green-600"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-medium text-gray-900">Provide meals</h4> |
|
|
<p class="text-sm text-gray-600">$50 provides 25 meals for hungry families</p> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex items-start mb-4"> |
|
|
<div class="bg-blue-100 p-3 rounded-full mr-4"> |
|
|
<i class="fas fa-book text-blue-600"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-medium text-gray-900">Support education</h4> |
|
|
<p class="text-sm text-gray-600">$100 provides school supplies for 5 children</p> |
|
|
</div> |
|
|
</div> |
|
|
<div class="flex items-start"> |
|
|
<div class="bg-purple-100 p-3 rounded-full mr-4"> |
|
|
<i class="fas fa-home text-purple-600"></i> |
|
|
</div> |
|
|
<div> |
|
|
<h4 class="font-medium text-gray-900">Safe shelter</h4> |
|
|
<p class="text-sm text-gray-600">$200 provides a week of safe housing</p> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<div class="mt-6 bg-white rounded-xl shadow-md overflow-hidden"> |
|
|
<div class="p-4"> |
|
|
<h3 class="font-bold text-lg text-gray-900 mb-3">Spread the Word</h3> |
|
|
<div class="flex justify-center space-x-4"> |
|
|
<button class="bg-blue-500 text-white p-3 rounded-full hover:bg-blue-600"> |
|
|
<i class="fab fa-facebook-f"></i> |
|
|
</button> |
|
|
<button class="bg-blue-400 text-white p-3 rounded-full hover:bg-blue-500"> |
|
|
<i class="fab fa-twitter"></i> |
|
|
</button> |
|
|
<button class="bg-pink-600 text-white p-3 rounded-full hover:bg-pink-700"> |
|
|
<i class="fab fa-instagram"></i> |
|
|
</button> |
|
|
<button class="bg-green-500 text-white p-3 rounded-full hover:bg-green-600"> |
|
|
<i class="fab fa-whatsapp"></i> |
|
|
</button> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
|
const database = { |
|
|
donations: [], |
|
|
donors: [] |
|
|
}; |
|
|
|
|
|
|
|
|
function showToast(message, type = 'success') { |
|
|
const toast = document.getElementById('toast'); |
|
|
toast.textContent = message; |
|
|
toast.className = `toast ${type} show`; |
|
|
|
|
|
setTimeout(() => { |
|
|
toast.classList.remove('show'); |
|
|
}, 3000); |
|
|
} |
|
|
|
|
|
document.addEventListener('DOMContentLoaded', function() { |
|
|
|
|
|
let donationAmount = 50; |
|
|
let isRecurring = false; |
|
|
|
|
|
|
|
|
const donationOptions = document.querySelectorAll('.donation-option'); |
|
|
const customAmountInput = document.getElementById('customAmount'); |
|
|
const oneTimeBtn = document.getElementById('oneTimeBtn'); |
|
|
const recurringBtn = document.getElementById('recurringBtn'); |
|
|
const donateBtn = document.getElementById('donateBtn'); |
|
|
const summaryAmount = document.getElementById('summaryAmount'); |
|
|
const summaryFrequency = document.getElementById('summaryFrequency'); |
|
|
const summaryTotal = document.getElementById('summaryTotal'); |
|
|
const dedicationCheckbox = document.getElementById('dedication'); |
|
|
const dedicationMessageContainer = document.getElementById('dedicationMessageContainer'); |
|
|
|
|
|
|
|
|
dedicationCheckbox.addEventListener('change', function() { |
|
|
if (this.checked) { |
|
|
dedicationMessageContainer.classList.remove('hidden'); |
|
|
} else { |
|
|
dedicationMessageContainer.classList.add('hidden'); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
const cardNumberInput = document.getElementById('cardNumber'); |
|
|
cardNumberInput.addEventListener('input', function(e) { |
|
|
let value = e.target.value.replace(/\s+/g, ''); |
|
|
if (value.length > 0) { |
|
|
value = value.match(new RegExp('.{1,4}', 'g')).join(' '); |
|
|
} |
|
|
e.target.value = value; |
|
|
}); |
|
|
|
|
|
|
|
|
const cardExpiryInput = document.getElementById('cardExpiry'); |
|
|
cardExpiryInput.addEventListener('input', function(e) { |
|
|
let value = e.target.value; |
|
|
if (value.length === 2 && !value.includes('/')) { |
|
|
e.target.value = value + '/'; |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
donationOptions.forEach(option => { |
|
|
option.addEventListener('click', function() { |
|
|
|
|
|
donationOptions.forEach(opt => { |
|
|
opt.classList.remove('bg-blue-50', 'border-blue-500', 'text-blue-700', 'selected'); |
|
|
opt.classList.add('bg-white', 'border-gray-300'); |
|
|
}); |
|
|
|
|
|
|
|
|
this.classList.remove('bg-white', 'border-gray-300'); |
|
|
this.classList.add('bg-blue-50', 'border-blue-500', 'text-blue-700', 'selected'); |
|
|
|
|
|
|
|
|
donationAmount = parseFloat(this.dataset.amount); |
|
|
updateSummary(); |
|
|
|
|
|
|
|
|
customAmountInput.value = ''; |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
customAmountInput.addEventListener('input', function() { |
|
|
if (this.value) { |
|
|
|
|
|
donationOptions.forEach(opt => { |
|
|
opt.classList.remove('bg-blue-50', 'border-blue-500', 'text-blue-700', 'selected'); |
|
|
opt.classList.add('bg-white', 'border-gray-300'); |
|
|
}); |
|
|
|
|
|
|
|
|
donationAmount = parseFloat(this.value) || 0; |
|
|
updateSummary(); |
|
|
} |
|
|
}); |
|
|
|
|
|
|
|
|
oneTimeBtn.addEventListener('click', function() { |
|
|
isRecurring = false; |
|
|
oneTimeBtn.classList.remove('bg-white', 'border-gray-300', 'text-gray-700'); |
|
|
oneTimeBtn.classList.add('bg-blue-600', 'text-white'); |
|
|
recurringBtn.classList.remove('bg-blue-600', 'text-white'); |
|
|
recurringBtn.classList.add('bg-white', 'border-gray-300', 'text-gray-700'); |
|
|
updateSummary(); |
|
|
}); |
|
|
|
|
|
recurringBtn.addEventListener('click', function() { |
|
|
isRecurring = true; |
|
|
recurringBtn.classList.remove('bg-white', 'border-gray-300', 'text-gray-700'); |
|
|
recurringBtn.classList.add('bg-blue-600', 'text-white'); |
|
|
oneTimeBtn.classList.remove('bg-blue-600', 'text-white'); |
|
|
oneTimeBtn.classList.add('bg-white', 'border-gray-300', 'text-gray-700'); |
|
|
updateSummary(); |
|
|
}); |
|
|
|
|
|
|
|
|
function updateSummary() { |
|
|
summaryAmount.textContent = `$${donationAmount.toFixed(2)}`; |
|
|
summaryFrequency.textContent = isRecurring ? 'Monthly' : 'One-Time'; |
|
|
summaryTotal.textContent = `$${donationAmount.toFixed(2)}`; |
|
|
} |
|
|
|
|
|
|
|
|
function validateForm() { |
|
|
const fullName = document.getElementById('fullName').value.trim(); |
|
|
const email = document.getElementById('email').value.trim(); |
|
|
const cardName = document.getElementById('cardName').value.trim(); |
|
|
const cardNumber = document.getElementById('cardNumber').value.trim(); |
|
|
const cardExpiry = document.getElementById('cardExpiry').value.trim(); |
|
|
const cardCvv = document.getElementById('cardCvv').value.trim(); |
|
|
|
|
|
if (donationAmount <= 0) { |
|
|
showToast('Please select or enter a donation amount', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (!fullName) { |
|
|
showToast('Please enter your full name', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (!email || !/^\S+@\S+\.\S+$/.test(email)) { |
|
|
showToast('Please enter a valid email address', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (!cardName) { |
|
|
showToast('Please enter the name on card', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (!cardNumber || cardNumber.replace(/\s/g, '').length < 16) { |
|
|
showToast('Please enter a valid card number', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (!cardExpiry || !/^\d{2}\/\d{2}$/.test(cardExpiry)) { |
|
|
showToast('Please enter a valid expiry date (MM/YY)', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
if (!cardCvv || cardCvv.length < 3) { |
|
|
showToast('Please enter a valid CVV', 'error'); |
|
|
return false; |
|
|
} |
|
|
|
|
|
return true; |
|
|
} |
|
|
|
|
|
|
|
|
donateBtn.addEventListener('click', function() { |
|
|
if (!validateForm()) return; |
|
|
|
|
|
|
|
|
const donationData = { |
|
|
amount: donationAmount, |
|
|
frequency: isRecurring ? 'monthly' : 'one-time', |
|
|
donor: { |
|
|
name: document.getElementById('fullName').value.trim(), |
|
|
email: document.getElementById('email').value.trim() |
|
|
}, |
|
|
payment: { |
|
|
cardName: document.getElementById('cardName').value.trim(), |
|
|
cardLast4: document.getElementById('cardNumber').value.trim().slice(-4), |
|
|
cardExpiry: document.getElementById('cardExpiry').value.trim() |
|
|
}, |
|
|
dedication: dedicationCheckbox.checked ? document.getElementById('dedicationMessage').value.trim() : null, |
|
|
subscribeToNewsletter: document.getElementById('newsletter').checked, |
|
|
date: new Date().toISOString() |
|
|
}; |
|
|
|
|
|
|
|
|
setTimeout(() => { |
|
|
|
|
|
database.donations.push(donationData); |
|
|
|
|
|
|
|
|
const existingDonor = database.donors.find(d => d.email === donationData.donor.email); |
|
|
if (!existingDonor) { |
|
|
database.donors.push({ |
|
|
name: donationData.donor.name, |
|
|
email: donationData.donor.email, |
|
|
totalDonated: donationData.amount, |
|
|
donationsCount: 1, |
|
|
isSubscribed: donationData.subscribeToNewsletter, |
|
|
firstDonationDate: new Date().toISOString() |
|
|
}); |
|
|
} else { |
|
|
existingDonor.totalDonated += donationData.amount; |
|
|
existingDonor.donationsCount += 1; |
|
|
existingDonor.isSubscribed = donationData.subscribeToNewsletter; |
|
|
} |
|
|
|
|
|
|
|
|
showToast(`Thank you for your donation of $${donationAmount.toFixed(2)}!`, 'success'); |
|
|
|
|
|
|
|
|
resetForm(); |
|
|
}, 1000); |
|
|
}); |
|
|
|
|
|
|
|
|
function resetForm() { |
|
|
donationOptions.forEach(opt => { |
|
|
opt.classList.remove('bg-blue-50', 'border-blue-500', 'text-blue-700', 'selected'); |
|
|
opt.classList.add('bg-white', 'border-gray-300'); |
|
|
}); |
|
|
document.querySelector('[data-amount="50"]').classList.add('bg-blue-50', 'border-blue-500', 'text-blue-700', 'selected'); |
|
|
|
|
|
customAmountInput.value = ''; |
|
|
document.getElementById('fullName').value = ''; |
|
|
document.getElementById('email').value = ''; |
|
|
document.getElementById('cardName').value = ''; |
|
|
document.getElementById('cardNumber').value = ''; |
|
|
document.getElementById('cardExpiry').value = ''; |
|
|
document.getElementById('cardCvv').value = ''; |
|
|
dedicationCheckbox.checked = false; |
|
|
document.getElementById('dedicationMessage').value = ''; |
|
|
dedicationMessageContainer.classList.add('hidden'); |
|
|
document.getElementById('newsletter').checked = true; |
|
|
|
|
|
donationAmount = 50; |
|
|
isRecurring = false; |
|
|
oneTimeBtn.classList.remove('bg-white', 'border-gray-300', 'text-gray-700'); |
|
|
oneTimeBtn.classList.add('bg-blue-600', 'text-white'); |
|
|
recurringBtn.classList.remove('bg-blue-600', 'text-white'); |
|
|
recurringBtn.classList.add('bg-white', 'border-gray-300', 'text-gray-700'); |
|
|
|
|
|
updateSummary(); |
|
|
} |
|
|
}); |
|
|
</script> |
|
|
|
|
|
|
|
|
<script> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</script> |
|
|
<p style="border-radius: 8px; text-align: center; font-size: 12px; color: #fff; margin-top: 16px;position: fixed; left: 8px; bottom: 8px; z-index: 10; background: rgba(0, 0, 0, 0.8); padding: 4px 8px;">Made with <img src="https://enzostvs-deepsite.hf.space/logo.svg" alt="DeepSite Logo" style="width: 16px; height: 16px; vertical-align: middle;display:inline-block;margin-right:3px;filter:brightness(0) invert(1);"><a href="https://enzostvs-deepsite.hf.space" style="color: #fff;text-decoration: underline;" target="_blank" >DeepSite</a> - 🧬 <a href="https://enzostvs-deepsite.hf.space?remix=hsnaruto/donation" style="color: #fff;text-decoration: underline;" target="_blank" >Remix</a></p></body> |
|
|
</html> |