Files
SI_TEALab_2025_LabWebsite/dofile/js/search.js
T
pengxiao a3eb5c7b2d init: TEALab 2025 实验室网站项目
从百度网盘 /apps/bypy/dofile/ 下载的完整项目结构,包含:
- dofile/: Flask 后端(端口 5000)+ 静态前端(端口 6002)
- officefile/: 项目相关文档
- .gitignore: Python venv / 日志 / 缓存

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-14 01:07:19 +08:00

145 lines
4.5 KiB
JavaScript

// Search Functionality
// Search data structure (in production, this would come from a server)
const searchData = {
pages: [
{ title: '关于实验室', url: 'website.html#about', content: 'DAEL Design AI Ecology Lab 跨学科研究平台' },
{ title: '研究方向', url: 'website.html#research', content: '生成式生态学 生物启发式智能 数字可持续性' },
{ title: '研究团队', url: 'website.html#team', content: 'Dr. Lin Chen Sarah Wu James Zhao Yu Zhang' },
{ title: '新闻资讯', url: 'news.html', content: '最新资讯 最新文章 热点文章' },
{ title: '成果展示', url: 'publications.html', content: '专著教材 文章目录 软件开发 学位论文' },
{ title: '资源下载', url: 'resources.html', content: '软件下载 资料下载 开源代码' },
{ title: '学术资料', url: 'academic.html', content: '软件使用 教程 文档' }
],
news: [],
publications: [],
resources: []
};
// Simple search function
function performSearch(query) {
if (!query || query.trim().length === 0) {
return [];
}
const lowerQuery = query.toLowerCase().trim();
const results = [];
// Search in pages
searchData.pages.forEach(page => {
const titleMatch = page.title.toLowerCase().includes(lowerQuery);
const contentMatch = page.content.toLowerCase().includes(lowerQuery);
if (titleMatch || contentMatch) {
results.push({
type: 'page',
title: page.title,
url: page.url,
snippet: page.content.substring(0, 100) + '...'
});
}
});
return results;
}
// Initialize search
function initSearch() {
const searchInput = document.getElementById('search-input');
const searchResults = document.getElementById('search-results');
const searchForm = document.getElementById('search-form');
if (!searchInput || !searchResults) return;
// Real-time search
let searchTimeout;
searchInput.addEventListener('input', (e) => {
clearTimeout(searchTimeout);
const query = e.target.value.trim();
if (query.length === 0) {
searchResults.classList.remove('active');
searchResults.innerHTML = '';
return;
}
searchTimeout = setTimeout(() => {
const results = performSearch(query);
displaySearchResults(results, searchResults);
}, 300);
});
// Handle form submission
if (searchForm) {
searchForm.addEventListener('submit', (e) => {
e.preventDefault();
const query = searchInput.value.trim();
if (query) {
window.location.href = `search.html?q=${encodeURIComponent(query)}`;
}
});
}
// Close search results when clicking outside
document.addEventListener('click', (e) => {
if (!searchInput.contains(e.target) && !searchResults.contains(e.target)) {
searchResults.classList.remove('active');
}
});
}
// Display search results
function displaySearchResults(results, container) {
if (results.length === 0) {
container.innerHTML = '<div class="search-result-item text-gray-500 text-center py-4">未找到相关结果</div>';
container.classList.add('active');
return;
}
container.innerHTML = results.map(result => `
<a href="${result.url}" class="search-result-item block">
<div class="font-semibold text-sm mb-1">${result.title}</div>
<div class="text-xs text-gray-500">${result.snippet}</div>
</a>
`).join('');
container.classList.add('active');
}
// Get search query from URL
function getSearchQuery() {
const params = new URLSearchParams(window.location.search);
return params.get('q') || '';
}
// Initialize on page load
document.addEventListener('DOMContentLoaded', () => {
initSearch();
// If on search page, perform search
if (window.location.pathname.includes('search.html')) {
const query = getSearchQuery();
const searchInput = document.getElementById('search-input');
const resultsContainer = document.getElementById('search-results-container');
if (query && searchInput) {
searchInput.value = query;
}
if (query && resultsContainer) {
const results = performSearch(query);
displaySearchResults(results, resultsContainer);
}
}
});