Spaces:
Running
Running
| // JanSahayak - Main JavaScript | |
| // Smooth scrolling | |
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { | |
| anchor.addEventListener('click', function (e) { | |
| e.preventDefault(); | |
| const target = document.querySelector(this.getAttribute('href')); | |
| if (target) { | |
| target.scrollIntoView({ | |
| behavior: 'smooth', | |
| block: 'start' | |
| }); | |
| } | |
| }); | |
| }); | |
| // Mobile menu toggle (if needed in future) | |
| const navToggle = document.querySelector('.nav-toggle'); | |
| const navMenu = document.querySelector('.nav-menu'); | |
| if (navToggle) { | |
| navToggle.addEventListener('click', () => { | |
| navMenu.classList.toggle('active'); | |
| }); | |
| } | |
| // Add entrance animations | |
| const observerOptions = { | |
| threshold: 0.1, | |
| rootMargin: '0px 0px -50px 0px' | |
| }; | |
| const observer = new IntersectionObserver((entries) => { | |
| entries.forEach(entry => { | |
| if (entry.isIntersecting) { | |
| entry.target.style.opacity = '1'; | |
| entry.target.style.transform = 'translateY(0)'; | |
| } | |
| }); | |
| }, observerOptions); | |
| // Observe all cards and sections | |
| document.querySelectorAll('.feature-card, .agent-card, .history-card').forEach(el => { | |
| el.style.opacity = '0'; | |
| el.style.transform = 'translateY(20px)'; | |
| el.style.transition = 'opacity 0.6s ease-out, transform 0.6s ease-out'; | |
| observer.observe(el); | |
| }); | |
| // Form validation helper | |
| function validateForm(formId) { | |
| const form = document.getElementById(formId); | |
| if (!form) return true; | |
| const textarea = form.querySelector('textarea'); | |
| if (textarea && textarea.value.trim().length < 50) { | |
| alert('Please provide more detailed information (at least 50 characters)'); | |
| return false; | |
| } | |
| return true; | |
| } | |
| // Copy to clipboard functionality | |
| function copyToClipboard(text) { | |
| navigator.clipboard.writeText(text).then(() => { | |
| showNotification('Copied to clipboard!', 'success'); | |
| }).catch(err => { | |
| console.error('Failed to copy:', err); | |
| }); | |
| } | |
| // Show notification | |
| function showNotification(message, type = 'info') { | |
| const notification = document.createElement('div'); | |
| notification.className = `notification notification-${type}`; | |
| notification.textContent = message; | |
| notification.style.cssText = ` | |
| position: fixed; | |
| top: 20px; | |
| right: 20px; | |
| padding: 15px 25px; | |
| background: ${type === 'success' ? '#10b981' : '#6366f1'}; | |
| color: white; | |
| border-radius: 10px; | |
| box-shadow: 0 10px 30px rgba(0,0,0,0.2); | |
| z-index: 9999; | |
| animation: slideIn 0.3s ease-out; | |
| `; | |
| document.body.appendChild(notification); | |
| setTimeout(() => { | |
| notification.style.animation = 'slideOut 0.3s ease-out'; | |
| setTimeout(() => notification.remove(), 300); | |
| }, 3000); | |
| } | |
| // Add CSS for notifications | |
| const style = document.createElement('style'); | |
| style.textContent = ` | |
| @keyframes slideIn { | |
| from { | |
| transform: translateX(400px); | |
| opacity: 0; | |
| } | |
| to { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| } | |
| @keyframes slideOut { | |
| from { | |
| transform: translateX(0); | |
| opacity: 1; | |
| } | |
| to { | |
| transform: translateX(400px); | |
| opacity: 0; | |
| } | |
| } | |
| `; | |
| document.head.appendChild(style); | |
| // Prevent form resubmission on page reload | |
| if (window.history.replaceState) { | |
| window.history.replaceState(null, null, window.location.href); | |
| } | |
| console.log('๐ JanSahayak UI loaded successfully!'); | |