| document.addEventListener('DOMContentLoaded', function() { |
| |
| const tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')); |
| tooltipTriggerList.map(function(tooltipTriggerEl) { |
| return new bootstrap.Tooltip(tooltipTriggerEl); |
| }); |
| |
| |
| document.querySelectorAll('a[href^="#"]').forEach(anchor => { |
| anchor.addEventListener('click', function(e) { |
| e.preventDefault(); |
| document.querySelector(this.getAttribute('href')).scrollIntoView({ |
| behavior: 'smooth' |
| }); |
| }); |
| }); |
| |
| |
| const darkModeToggle = document.getElementById('darkModeToggle'); |
| if (darkModeToggle) { |
| darkModeToggle.addEventListener('click', () => { |
| document.documentElement.classList.toggle('dark'); |
| localStorage.setItem('darkMode', document.documentElement.classList.contains('dark')); |
| }); |
| } |
| |
| |
| const animateOnScroll = function() { |
| const elements = document.querySelectorAll('.animate-on-scroll'); |
| elements.forEach(element => { |
| const elementPosition = element.getBoundingClientRect().top; |
| const windowHeight = window.innerHeight; |
| |
| if (elementPosition < windowHeight - 100) { |
| element.classList.add('animate-fadeIn'); |
| } |
| }); |
| }; |
| |
| window.addEventListener('scroll', animateOnScroll); |
| animateOnScroll(); |
| |
| |
| feather.replace(); |
| |
| |
| window.showNotification = function(message, type = 'info') { |
| const notification = document.createElement('div'); |
| notification.className = `fixed top-4 right-4 px-6 py-3 rounded-lg shadow-lg text-white ${ |
| type === 'success' ? 'bg-green-600' : |
| type === 'error' ? 'bg-red-600' : |
| 'bg-indigo-600' |
| }`; |
| notification.textContent = message; |
| document.body.appendChild(notification); |
| |
| setTimeout(() => { |
| notification.classList.add('opacity-0', 'transition-opacity', 'duration-300'); |
| setTimeout(() => notification.remove(), 300); |
| }, 3000); |
| }; |
| }); |