(term)
| 5546 | } |
| 5547 | |
| 5548 | async function runSearchEverywhere(term) { |
| 5549 | if (!term || !term.trim()) { |
| 5550 | showToast(t("enter_search_term") || "Enter a search term.", 'warning'); |
| 5551 | return; |
| 5552 | } |
| 5553 | ensureSearchEverywhereModal(); |
| 5554 | const runId = ++searchEverywhereRunId; |
| 5555 | const { statusEl, listEl } = ensureSearchEverywhereResultBlocks(); |
| 5556 | if (statusEl) { |
| 5557 | statusEl.textContent = `${t("loading") || "Loading..."}`; |
| 5558 | } |
| 5559 | if (listEl) { |
| 5560 | listEl.innerHTML = ''; |
| 5561 | } |
| 5562 | |
| 5563 | const limitVal = searchEverywhereLimitEl ? Number(searchEverywhereLimitEl.value || 50) : 50; |
| 5564 | const limit = Math.max(1, Math.min(200, limitVal || 50)); |
| 5565 | let sourceId = searchEverywhereSourceEl ? String(searchEverywhereSourceEl.value || '').trim() : ''; |
| 5566 | if (sourceId === 'all') { |
| 5567 | const sources = getSearchEverywhereSources(); |
| 5568 | if (sources.length > 1) { |
| 5569 | await runSearchEverywhereAcrossSources(term, limit, sources, runId); |
| 5570 | return; |
| 5571 | } |
| 5572 | if (sources.length === 1) { |
| 5573 | sourceId = String(sources[0]?.id || '').trim(); |
| 5574 | } |
| 5575 | } |
| 5576 | const sourceParam = sourceId ? `&sourceId=${encodeURIComponent(sourceId)}` : ''; |
| 5577 | |
| 5578 | try { |
| 5579 | const res = await fetch(withBase(`/api/pro/search/query.php?q=${encodeURIComponent(term)}&limit=${limit}${sourceParam}`), { |
| 5580 | credentials: 'include', |
| 5581 | }); |
| 5582 | const data = await res.json(); |
| 5583 | if (runId !== searchEverywhereRunId) return; |
| 5584 | if (!res.ok || !data.ok) { |
| 5585 | throw new Error(data.error || `HTTP ${res.status}`); |
| 5586 | } |
| 5587 | renderSearchEverywhereResults(data.items || []); |
| 5588 | if (statusEl) statusEl.textContent = ''; |
| 5589 | if (data.reindexed) { |
| 5590 | showToast(t("search_everywhere_reindexed") || "Index refreshed.", 'success'); |
| 5591 | } |
| 5592 | } catch (e) { |
| 5593 | if (runId !== searchEverywhereRunId) return; |
| 5594 | console.error('Search everywhere error', e); |
| 5595 | if (searchEverywhereResultsEl) { |
| 5596 | searchEverywhereResultsEl.innerHTML = `<div class="text-danger" style="font-size:12px;">${t("search_everywhere_error") || "Search failed."}</div>`; |
| 5597 | } |
| 5598 | if (statusEl) statusEl.textContent = ''; |
| 5599 | showToast(t("search_everywhere_error") || "Search failed.", 'error'); |
| 5600 | } |
| 5601 | } |
| 5602 | |
| 5603 | async function navigateToSearchResult(folder, name, sourceId) { |
| 5604 | if (!folder) return; |
no test coverage detected