File size: 12,612 Bytes
bd1df07
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
document.addEventListener('DOMContentLoaded', function() {
    // Initialize auth forms
    renderAuthForms();
    
    // Setup event listeners
    setupAuthEventListeners();
});

function renderAuthForms() {
    const authFormsContainer = document.getElementById('auth-forms');
    
    authFormsContainer.innerHTML = `
        <div id="login-form" class="auth-form active">
            <h2 class="text-2xl font-bold text-gray-800 mb-6 text-center">Welcome back</h2>
            <form id="login-form-element" class="space-y-4">
                <div>
                    <label for="login-email" class="block text-sm font-medium text-gray-700 mb-1">Email</label>
                    <input type="email" id="login-email" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="you@example.com" required>
                    <div id="login-email-error" class="error-message"></div>
                </div>
                <div>
                    <label for="login-password" class="block text-sm font-medium text-gray-700 mb-1">Password</label>
                    <input type="password" id="login-password" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="••••••••" required>
                    <div id="login-password-error" class="error-message"></div>
                </div>
                <div class="flex items-center justify-between">
                    <div class="flex items-center">
                        <input id="remember-me" type="checkbox" class="h-4 w-4 text-indigo-600 focus:ring-indigo-500 border-gray-300 rounded">
                        <label for="remember-me" class="ml-2 block text-sm text-gray-700">Remember me</label>
                    </div>
                    <a href="#" id="forgot-password-link" class="text-sm text-indigo-600 hover:text-indigo-500">Forgot password?</a>
                </div>
                <button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">Sign in</button>
            </form>
            <div class="mt-4 text-center text-sm text-gray-600">
                Don't have an account? <a href="#" id="show-register-link" class="text-indigo-600 hover:text-indigo-500">Sign up</a>
            </div>
        </div>
        
        <div id="register-form" class="auth-form hidden">
            <h2 class="text-2xl font-bold text-gray-800 mb-6 text-center">Create your account</h2>
            <form id="register-form-element" class="space-y-4">
                <div>
                    <label for="register-name" class="block text-sm font-medium text-gray-700 mb-1">Full Name</label>
                    <input type="text" id="register-name" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="John Doe" required>
                    <div id="register-name-error" class="error-message"></div>
                </div>
                <div>
                    <label for="register-email" class="block text-sm font-medium text-gray-700 mb-1">Email</label>
                    <input type="email" id="register-email" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="you@example.com" required>
                    <div id="register-email-error" class="error-message"></div>
                </div>
                <div>
                    <label for="register-password" class="block text-sm font-medium text-gray-700 mb-1">Password</label>
                    <input type="password" id="register-password" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="••••••••" required>
                    <div id="register-password-error" class="error-message"></div>
                </div>
                <div>
                    <label for="register-confirm-password" class="block text-sm font-medium text-gray-700 mb-1">Confirm Password</label>
                    <input type="password" id="register-confirm-password" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="••••••••" required>
                    <div id="register-confirm-password-error" class="error-message"></div>
                </div>
                <button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">Create account</button>
            </form>
            <div class="mt-4 text-center text-sm text-gray-600">
                Already have an account? <a href="#" id="show-login-link" class="text-indigo-600 hover:text-indigo-500">Sign in</a>
            </div>
        </div>
        
        <div id="forgot-password-form" class="auth-form hidden">
            <h2 class="text-2xl font-bold text-gray-800 mb-6 text-center">Reset your password</h2>
            <form id="forgot-password-form-element" class="space-y-4">
                <p class="text-sm text-gray-600 mb-4">Enter your email and we'll send you a link to reset your password.</p>
                <div>
                    <label for="forgot-password-email" class="block text-sm font-medium text-gray-700 mb-1">Email</label>
                    <input type="email" id="forgot-password-email" class="w-full px-4 py-2 border border-gray-300 rounded-md focus:ring-indigo-500 focus:border-indigo-500" placeholder="you@example.com" required>
                    <div id="forgot-password-email-error" class="error-message"></div>
                </div>
                <button type="submit" class="w-full bg-indigo-600 text-white py-2 px-4 rounded-md hover:bg-indigo-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500">Send reset link</button>
            </form>
            <div class="mt-4 text-center text-sm text-gray-600">
                <a href="#" id="back-to-login-link" class="text-indigo-600 hover:text-indigo-500">Back to sign in</a>
            </div>
        </div>
        
        <div id="verify-email-notice" class="auth-form hidden">
            <div class="flex justify-center mb-6">
                <i data-feather="mail" class="text-indigo-600 w-12 h-12"></i>
            </div>
            <h2 class="text-2xl font-bold text-gray-800 mb-4 text-center">Verify your email</h2>
            <p class="text-sm text-gray-600 mb-6 text-center">We've sent a verification link to <span id="user-email" class="font-medium">user@example.com</span>. Please check your inbox and click the link to verify your account.</p>
            <div class="text-center">
                <button id="resend-verification" class="text-sm text-indigo-600 hover:text-indigo-500">Didn't receive the email? Resend</button>
            </div>
            <div id="resend-success" class="success-message text-center mt-2 hidden">Verification email resent successfully!</div>
        </div>
    `;
    
    feather.replace();
}

function setupAuthEventListeners() {
    // Toggle between login and register forms
    document.getElementById('show-register-link')?.addEventListener('click', (e) => {
        e.preventDefault();
        document.getElementById('login-form').classList.remove('active');
        document.getElementById('login-form').classList.add('hidden');
        document.getElementById('register-form').classList.remove('hidden');
        document.getElementById('register-form').classList.add('active');
    });
    
    document.getElementById('show-login-link')?.addEventListener('click', (e) => {
        e.preventDefault();
        document.getElementById('register-form').classList.remove('active');
        document.getElementById('register-form').classList.add('hidden');
        document.getElementById('login-form').classList.remove('hidden');
        document.getElementById('login-form').classList.add('active');
    });
    
    // Forgot password flow
    document.getElementById('forgot-password-link')?.addEventListener('click', (e) => {
        e.preventDefault();
        document.getElementById('login-form').classList.remove('active');
        document.getElementById('login-form').classList.add('hidden');
        document.getElementById('forgot-password-form').classList.remove('hidden');
        document.getElementById('forgot-password-form').classList.add('active');
    });
    
    document.getElementById('back-to-login-link')?.addEventListener('click', (e) => {
        e.preventDefault();
        document.getElementById('forgot-password-form').classList.remove('active');
        document.getElementById('forgot-password-form').classList.add('hidden');
        document.getElementById('login-form').classList.remove('hidden');
        document.getElementById('login-form').classList.add('active');
    });
    
    // Form submissions
    document.getElementById('login-form-element')?.addEventListener('submit', (e) => {
        e.preventDefault();
        const email = document.getElementById('login-email').value;
        const password = document.getElementById('login-password').value;
        
        // Simulate login
        if (email && password) {
            // In a real app, this would be an API call
            setTimeout(() => {
                // Show verification notice for demo purposes
                document.getElementById('user-email').textContent = email;
                document.getElementById('login-form').classList.remove('active');
                document.getElementById('login-form').classList.add('hidden');
                document.getElementById('verify-email-notice').classList.remove('hidden');
                document.getElementById('verify-email-notice').classList.add('active');
            }, 500);
        }
    });
    
    document.getElementById('register-form-element')?.addEventListener('submit', (e) => {
        e.preventDefault();
        const name = document.getElementById('register-name').value;
        const email = document.getElementById('register-email').value;
        const password = document.getElementById('register-password').value;
        const confirmPassword = document.getElementById('register-confirm-password').value;
        
        // Simple validation
        if (password !== confirmPassword) {
            document.getElementById('register-confirm-password-error').textContent = "Passwords don't match";
            document.getElementById('register-confirm-password').classList.add('input-error');
            return;
        }
        
        // Simulate registration
        if (name && email && password) {
            // In a real app, this would be an API call
            setTimeout(() => {
                // Show verification notice
                document.getElementById('user-email').textContent = email;
                document.getElementById('register-form').classList.remove('active');
                document.getElementById('register-form').classList.add('hidden');
                document.getElementById('verify-email-notice').classList.remove('hidden');
                document.getElementById('verify-email-notice').classList.add('active');
            }, 500);
        }
    });
    
    document.getElementById('forgot-password-form-element')?.addEventListener('submit', (e) => {
        e.preventDefault();
        const email = document.getElementById('forgot-password-email').value;
        
        // Simulate password reset request
        if (email) {
            // In a real app, this would be an API call
            setTimeout(() => {
                alert(`Password reset link sent to ${email}`);
                document.getElementById('forgot-password-form').classList.remove('active');
                document.getElementById('forgot-password-form').classList.add('hidden');
                document.getElementById('login-form').classList.remove('hidden');
                document.getElementById('login-form').classList.add('active');
            }, 500);
        }
    });
    
    document.getElementById('resend-verification')?.addEventListener('click', (e) => {
        e.preventDefault();
        // Simulate resending verification email
        const successMessage = document.getElementById('resend-success');
        successMessage.classList.remove('hidden');
        setTimeout(() => successMessage.classList.add('hidden'), 3000);
    });
}