|
|
|
|
|
const firebaseConfig = {
|
|
|
apiKey: "AIzaSyA__OFybLoWSA6x_8lIyo0Z1Cb2ozhbHoA",
|
|
|
authDomain: "capstone-project-5f445.firebaseapp.com",
|
|
|
projectId: "capstone-project-5f445",
|
|
|
storageBucket: "capstone-project-5f445.firebasestorage.app",
|
|
|
messagingSenderId: "701976065811",
|
|
|
appId: "1:701976065811:web:494fa4ea19f04f1dd00ce6",
|
|
|
measurementId: "G-EVZTJ9X538"
|
|
|
};
|
|
|
|
|
|
|
|
|
const app = firebase.initializeApp(firebaseConfig);
|
|
|
const auth = firebase.auth();
|
|
|
const db = firebase.firestore();
|
|
|
|
|
|
|
|
|
const signUpForm = document.querySelector('.sign-up');
|
|
|
const signInForm = document.querySelector('.sign-in');
|
|
|
const forgotForm = document.querySelector('.forgot-password');
|
|
|
|
|
|
|
|
|
signUpForm.addEventListener('submit', async (event) => {
|
|
|
event.preventDefault();
|
|
|
|
|
|
const name = document.querySelector('.sign-up input[type="text"]').value;
|
|
|
const email = document.querySelector('.sign-up input[type="email"]').value;
|
|
|
const password = document.querySelectorAll('.sign-up input[type="password"]')[0].value;
|
|
|
const confirmPassword = document.querySelectorAll('.sign-up input[type="password"]')[1].value;
|
|
|
|
|
|
if (password !== confirmPassword) {
|
|
|
alert("Passwords don't match!");
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
try {
|
|
|
const userCredential = await auth.createUserWithEmailAndPassword(email, password);
|
|
|
const user = userCredential.user;
|
|
|
|
|
|
|
|
|
await db.collection('users').doc(user.uid).set({
|
|
|
name: name,
|
|
|
email: email,
|
|
|
createdAt: firebase.firestore.FieldValue.serverTimestamp()
|
|
|
});
|
|
|
|
|
|
|
|
|
alert('Account created successfully! Redirecting to login...');
|
|
|
|
|
|
|
|
|
wrapper.classList.add('animated-signup');
|
|
|
wrapper.classList.remove('animated-signin', 'animated-forgot');
|
|
|
|
|
|
} catch (error) {
|
|
|
alert(error.message);
|
|
|
console.error("Signup error:", error);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
|
|
|
function scatterPapers() {
|
|
|
|
|
|
for (let i = 0; i < 10; i++) {
|
|
|
const page = document.createElement('div');
|
|
|
page.classList.add('page');
|
|
|
page.style.left = '50%';
|
|
|
page.style.top = '50%';
|
|
|
page.style.transform = 'translate(-50%, -50%)';
|
|
|
page.style.setProperty('--x', `${Math.random() * 800 - 400}px`);
|
|
|
page.style.setProperty('--y', `${Math.random() * -600}px`);
|
|
|
page.style.setProperty('--rotate', `${Math.random() * 720 - 360}deg`);
|
|
|
document.body.appendChild(page);
|
|
|
|
|
|
setTimeout(() => page.remove(), 3000);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
function tearPaper() {
|
|
|
const leftPiece = document.createElement('div');
|
|
|
leftPiece.classList.add('tear-left');
|
|
|
leftPiece.style.left = 'calc(50% - 75px)';
|
|
|
leftPiece.style.top = '50%';
|
|
|
leftPiece.style.transform = 'translateY(-50%)';
|
|
|
document.body.appendChild(leftPiece);
|
|
|
|
|
|
const rightPiece = document.createElement('div');
|
|
|
rightPiece.classList.add('tear-right');
|
|
|
rightPiece.style.left = '50%';
|
|
|
rightPiece.style.top = '50%';
|
|
|
rightPiece.style.transform = 'translateY(-50%)';
|
|
|
document.body.appendChild(rightPiece);
|
|
|
|
|
|
setTimeout(() => {
|
|
|
leftPiece.remove();
|
|
|
rightPiece.remove();
|
|
|
}, 7000);
|
|
|
}
|
|
|
|
|
|
signInForm.addEventListener('submit', async (event) => {
|
|
|
event.preventDefault();
|
|
|
|
|
|
const email = document.querySelector('.sign-in input[type="email"]').value;
|
|
|
const password = document.querySelector('.sign-in input[type="password"]').value;
|
|
|
|
|
|
try {
|
|
|
const userCredential = await auth.signInWithEmailAndPassword(email, password);
|
|
|
const user = userCredential.user;
|
|
|
|
|
|
|
|
|
const userDoc = await db.collection('users').doc(user.uid).get();
|
|
|
let username = "User";
|
|
|
if (userDoc.exists) {
|
|
|
username = userDoc.data().name;
|
|
|
}
|
|
|
|
|
|
|
|
|
localStorage.setItem("username", username);
|
|
|
localStorage.setItem("userId", user.uid);
|
|
|
|
|
|
|
|
|
scatterPapers();
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
window.location.href = "/home";
|
|
|
}, 2000);
|
|
|
|
|
|
} catch (error) {
|
|
|
|
|
|
tearPaper();
|
|
|
console.error("Login error:", error);
|
|
|
|
|
|
}
|
|
|
});
|
|
|
|
|
|
|
|
|
forgotForm.addEventListener('submit', async (event) => {
|
|
|
event.preventDefault();
|
|
|
const email = document.querySelector('.forgot-password input[type="email"]').value;
|
|
|
|
|
|
try {
|
|
|
await auth.sendPasswordResetEmail(email);
|
|
|
alert('Password reset email sent! Check your inbox.');
|
|
|
} catch (error) {
|
|
|
alert(error.message);
|
|
|
console.error("Password reset error:", error);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
|
|
|
let wrapper = document.querySelector('.wrapper');
|
|
|
const signUpLink = document.querySelector('.signup-link');
|
|
|
const signInLink = document.querySelector('.signin-link');
|
|
|
const forgotPassLink = document.querySelector('.forgot-pass a');
|
|
|
const backToLoginLink = document.querySelector('.forget-link');
|
|
|
|
|
|
|
|
|
wrapper.classList.add('animated-signup');
|
|
|
|
|
|
|
|
|
signUpLink.addEventListener('click', () => {
|
|
|
wrapper.classList.add('animated-signin');
|
|
|
wrapper.classList.remove('animated-signup', 'animated-forgot');
|
|
|
});
|
|
|
|
|
|
signInLink.addEventListener('click', () => {
|
|
|
wrapper.classList.add('animated-signup');
|
|
|
wrapper.classList.remove('animated-signin', 'animated-forgot');
|
|
|
});
|
|
|
|
|
|
forgotPassLink.addEventListener('click', () => {
|
|
|
wrapper.classList.add('animated-forgot');
|
|
|
wrapper.classList.remove('animated-signin', 'animated-signup');
|
|
|
});
|
|
|
|
|
|
backToLoginLink.addEventListener('click', () => {
|
|
|
wrapper.classList.add('animated-signup');
|
|
|
wrapper.classList.remove('animated-forgot');
|
|
|
});
|
|
|
|
|
|
|
|
|
document.addEventListener("DOMContentLoaded", () => {
|
|
|
const paperFallContainer = document.querySelector('.paper-fall');
|
|
|
function createPaper() {
|
|
|
const paper = document.createElement('div');
|
|
|
paper.classList.add('paper');
|
|
|
|
|
|
|
|
|
const size = Math.random() * 30 + 20;
|
|
|
paper.style.width = `${size}px`;
|
|
|
paper.style.height = `${size}px`;
|
|
|
|
|
|
|
|
|
const randomX = Math.random() * window.innerWidth;
|
|
|
paper.style.left = `${randomX}px`;
|
|
|
|
|
|
|
|
|
const duration = Math.random() * 5 + 5;
|
|
|
paper.style.animationDuration = `${duration}s`;
|
|
|
|
|
|
|
|
|
const rotation = Math.random() * 360;
|
|
|
paper.style.transform = `rotate(${rotation}deg)`;
|
|
|
|
|
|
|
|
|
paperFallContainer.appendChild(paper);
|
|
|
|
|
|
|
|
|
setTimeout(() => {
|
|
|
paper.remove();
|
|
|
}, duration * 1000);
|
|
|
}
|
|
|
|
|
|
|
|
|
setInterval(createPaper, 100);
|
|
|
}); |