Agnik7/flowscript-docs-the-scripting-river-guide
0
1// Dark mode toggle functionality2document.addEventListener('DOMContentLoaded', () => {3 // Check for saved theme preference or use system preference4 const savedTheme = localStorage.getItem('theme');5 const systemPrefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;6 7 if (savedTheme === 'dark' || (!savedTheme && systemPrefersDark)) {8 document.documentElement.classList.add('dark');9 }10 11 // Initialize search functionality12 const searchInput = document.querySelector('#search-input');13 if (searchInput) {14 searchInput.addEventListener('input', debounce(handleSearch, 300));15 }16});17 18function toggleDarkMode() {19 const html = document.documentElement;20 html.classList.toggle('dark');21 localStorage.setItem('theme', html.classList.contains('dark') ? 'dark' : 'light');22}23 24// Search functionality25async function handleSearch(e) {26 const query = e.target.value.trim();27 if (!query) return;28 29 try {30 // This would be replaced with actual search API call31 const results = await mockSearch(query);32 displaySearchResults(results);33 } catch (error) {34 console.error('Search failed:', error);35 }36}37 38function mockSearch(query) {39 return new Promise(resolve => {40 setTimeout(() => {41 resolve([42 { title: 'Getting Started', url: '/getting-started', excerpt: 'Learn how to set up FlowScript in your project...' },43 { title: 'API Reference', url: '/api-reference', excerpt: 'Complete reference of all FlowScript APIs...' },44 { title: 'Transform Operators', url: '/guides/transform-operators', excerpt: 'Guide to using transform operators in your flows...' }45 ].filter(item => 46 item.title.toLowerCase().includes(query.toLowerCase()) || 47 item.excerpt.toLowerCase().includes(query.toLowerCase())48 ));49 }, 300);50 });51}52 53function displaySearchResults(results) {54 const container = document.querySelector('#search-results');55 if (!container) return;56 57 container.innerHTML = results.length 58 ? results.map(result => `59 <a href="${result.url}" class="block p-3 hover:bg-gray-100 dark:hover:bg-gray-800 rounded transition">60 <h3 class="font-medium text-blue-600 dark:text-blue-400">${result.title}</h3>61 <p class="text-sm text-gray-600 dark:text-gray-400">${result.excerpt}</p>62 </a>63 `).join('')64 : '<p class="p-3 text-gray-600 dark:text-gray-400">No results found</p>';65}66 67// Utility function68function debounce(func, wait) {69 let timeout;70 return function(...args) {71 clearTimeout(timeout);72 timeout = setTimeout(() => func.apply(this, args), wait);73 };74}