search_interface/node_modules/.cache/babel-loader/862a7477836c638b62a357cf8fdaed0c903fb56f96a84f9eec02729b995bb31a.json
2025-04-16 00:01:13 +09:00

1 line
38 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"ast":null,"code":"var _jsxFileName = \"/Users/christian/workspace/search_interface/src/MultiCategoryResults.jsx\",\n _s = $RefreshSig$();\n// MultiCategoryResults.jsx\nimport React, { useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport \"./App.css\";\nimport { jsxDEV as _jsxDEV, Fragment as _Fragment } from \"react/jsx-dev-runtime\";\nfunction MultiCategoryResults({\n query,\n categories\n}) {\n _s();\n const [results, setResults] = useState([]);\n const [loading, setLoading] = useState(false);\n const [videoResults, setVideoResults] = useState([]);\n const [videoLoading, setVideoLoading] = useState(false);\n const [currentPage, setCurrentPage] = useState(1);\n const [viewMode, setViewMode] = useState(\"web\");\n const [visitedLinks, setVisitedLinks] = useState(() => {\n const stored = localStorage.getItem(\"visitedLinks\");\n return stored ? JSON.parse(stored) : [];\n });\n const resultsPerPage = 10;\n const numCats = categories.length;\n\n // Define pages per category according to the rules:\n // 1 category: 9 pages, 2 categories: 4 pages each, 3 categories: 3 pages each, 4+ categories: 2 pages each.\n let pagesPerCat;\n if (numCats === 1) {\n pagesPerCat = 9;\n } else if (numCats === 2) {\n pagesPerCat = 4;\n } else if (numCats === 3) {\n pagesPerCat = 3;\n } else {\n pagesPerCat = 2;\n }\n const totalPages = numCats > 1 ? numCats * pagesPerCat : pagesPerCat;\n\n // Determine which category to fetch.\n // For multiple categories, we rotate through them.\n const categoryIndex = (currentPage - 1) % numCats;\n const pageForCategory = Math.floor((currentPage - 1) / numCats) + 1;\n const fetchCategory = categories[categoryIndex];\n\n // For header and styling, always use the primary category (the first element).\n const primaryCategory = categories[0];\n const headerCategory = primaryCategory;\n\n // URL maps\n const sourceMap = {\n science: \"https://science.tsugutsugugo.com/yacysearch.json\",\n philosophy: \"https://sophos.tsugutsugugo.com/yacysearch.json\",\n tech: \"https://tech.tsugutsugugo.com/yacysearch.json\",\n discover: \"https://web.tsugutsugugo.com/yacysearch.json\"\n };\n const headerMap = {\n science: \"/header.png\",\n philosophy: \"/header_philosophy.png\",\n tech: \"/header_tech.png\",\n discover: \"/header_web.png\",\n multi: \"/header_multi.png\"\n };\n const headerBgMap = {\n science: \"#f8f8f8\",\n philosophy: \"#ffffff\",\n tech: \"#ffffff\",\n discover: \"#ffffff\",\n multi: \"#ffffff\"\n };\n const appBgMap = {\n science: \"#fcfcff\",\n philosophy: \"#ffffff\",\n tech: \"#ffffff\",\n discover: \"#ffffff\",\n multi: \"#ffffff\"\n };\n\n // Determine if mobile based on window width.\n const isMobile = window.innerWidth < 600;\n\n // Fetch results based on current page.\n useEffect(() => {\n const fetchResults = async () => {\n setLoading(true);\n // Calculate the starting record number for this page.\n const startRecord = (pageForCategory - 1) * resultsPerPage;\n // Build the fetch URL.\n const url = `${sourceMap[fetchCategory]}?query=${encodeURIComponent(query)}&resource=global&urlmaskfilter=.*&prefermaskfilter=&nav=all&maximumRecords=${resultsPerPage}&startRecord=${startRecord}`;\n try {\n const response = await fetch(url);\n if (response.ok) {\n var _data$channels$;\n const data = await response.json();\n const items = ((_data$channels$ = data.channels[0]) === null || _data$channels$ === void 0 ? void 0 : _data$channels$.items) || [];\n if (isMobile) {\n // For mobile: on page 1, set the results; on subsequent pages, append.\n if (currentPage === 1) {\n setResults(items);\n } else {\n setResults(prev => [...prev, ...items]);\n }\n } else {\n // Desktop behavior:\n if (numCats > 1) {\n // Multicategory desktop fetch simply replaces results.\n setResults(items);\n } else {\n // For desktop single category, aggregate results over all pages.\n let allResults = [];\n for (let page = 0; page < pagesPerCat; page++) {\n var _dataPage$channels$;\n const record = page * resultsPerPage;\n const responsePage = await fetch(`${sourceMap[primaryCategory]}?query=${encodeURIComponent(query)}&resource=global&urlmaskfilter=.*&prefermaskfilter=&nav=all&maximumRecords=${resultsPerPage}&startRecord=${record}`);\n if (!responsePage.ok) continue;\n const dataPage = await responsePage.json();\n allResults = [...allResults, ...(((_dataPage$channels$ = dataPage.channels[0]) === null || _dataPage$channels$ === void 0 ? void 0 : _dataPage$channels$.items) || [])];\n }\n setResults(allResults);\n }\n }\n } else {\n console.error(\"Error response from server\");\n }\n } catch (error) {\n console.error(\"Error fetching multi-category results:\", error);\n }\n setLoading(false);\n };\n if (viewMode === \"web\") {\n fetchResults();\n }\n }, [query, currentPage, viewMode, numCats, pageForCategory, fetchCategory, primaryCategory, resultsPerPage, pagesPerCat, isMobile]);\n\n // Compute the maximum number of pages.\n // For mobile, we want to stop once we have reached the page limit.\n const computedPages = isMobile ? numCats > 1 ? totalPages : pagesPerCat : numCats > 1 ? totalPages : Math.ceil(results.length / resultsPerPage);\n\n // For mobile devices, add a scroll event listener to load more results when nearing the bottom.\n useEffect(() => {\n if (isMobile && viewMode === \"web\") {\n const handleScroll = () => {\n const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n const windowHeight = window.innerHeight;\n const fullHeight = document.documentElement.offsetHeight;\n // When near the bottom and not already loading, request the next page if available.\n if (scrollTop + windowHeight >= fullHeight - 50) {\n if (!loading && currentPage < computedPages) {\n setCurrentPage(prevPage => prevPage + 1);\n }\n }\n };\n window.addEventListener(\"scroll\", handleScroll);\n return () => {\n window.removeEventListener(\"scroll\", handleScroll);\n };\n }\n }, [isMobile, viewMode, loading, currentPage, computedPages]);\n\n // For desktop pagination (when not mobile).\n const paginate = page => setCurrentPage(page);\n const fetchVideoResults = async () => {\n setVideoLoading(true);\n try {\n const response = await fetch(`https://stream.tsugutsugugo.com/api/v1/videos?search=${encodeURIComponent(query)}`);\n if (!response.ok) throw new Error(\"Video API error\");\n const data = await response.json();\n setVideoResults(data.data || []);\n } catch (error) {\n console.error(\"Error fetching video results:\", error);\n } finally {\n setVideoLoading(false);\n }\n };\n const handleLinkClick = url => {\n setVisitedLinks(prev => {\n if (!prev.includes(url)) {\n const newVisited = [...prev, url];\n localStorage.setItem(\"visitedLinks\", JSON.stringify(newVisited));\n return newVisited;\n }\n return prev;\n });\n };\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"App results-page\",\n style: {\n backgroundColor: appBgMap[headerCategory]\n },\n children: [/*#__PURE__*/_jsxDEV(\"header\", {\n className: \"header-bar\",\n style: {\n backgroundColor: headerBgMap[headerCategory]\n },\n children: /*#__PURE__*/_jsxDEV(Link, {\n to: \"/\",\n children: /*#__PURE__*/_jsxDEV(\"img\", {\n src: headerMap[headerCategory],\n alt: `${headerCategory} Header`\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 227,\n columnNumber: 11\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 226,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 222,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"main\", {\n className: \"main-content\",\n children: [/*#__PURE__*/_jsxDEV(\"div\", {\n id: \"tagline\",\n children: [\"Search Results for \", /*#__PURE__*/_jsxDEV(\"strong\", {\n children: query\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 235,\n columnNumber: 30\n }, this), \",\", \" \", viewMode === \"web\" ? /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"link-switch\",\n onClick: async () => {\n await fetchVideoResults();\n setViewMode(\"video\");\n },\n children: \"browse videos\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 237,\n columnNumber: 13\n }, this) : /*#__PURE__*/_jsxDEV(\"span\", {\n className: \"link-switch\",\n onClick: () => setViewMode(\"web\"),\n children: \"browse web results\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 247,\n columnNumber: 13\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 234,\n columnNumber: 9\n }, this), viewMode === \"web\" ? loading && currentPage === 1 ? /*#__PURE__*/_jsxDEV(\"p\", {\n children: \"Loading results...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 254,\n columnNumber: 13\n }, this) : results.length > 0 ? /*#__PURE__*/_jsxDEV(_Fragment, {\n children: [/*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"results-list\",\n children: results.map((item, idx) => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"result-item\",\n children: [/*#__PURE__*/_jsxDEV(\"a\", {\n href: item.link,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n onClick: () => handleLinkClick(item.link),\n className: `result-title ${visitedLinks.includes(item.link) ? \"visited-link\" : \"\"}`,\n children: item.title\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 260,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n dangerouslySetInnerHTML: {\n __html: item.description\n }\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 271,\n columnNumber: 21\n }, this), /*#__PURE__*/_jsxDEV(\"a\", {\n href: `https://web.archive.org/web/*/${item.link}`,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"cache-link\",\n children: \"Cache\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 272,\n columnNumber: 21\n }, this)]\n }, idx, true, {\n fileName: _jsxFileName,\n lineNumber: 259,\n columnNumber: 19\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 257,\n columnNumber: 15\n }, this), !isMobile && window.innerWidth >= 600 && computedPages > 1 && /*#__PURE__*/_jsxDEV(\"div\", {\n className: \"pagination\",\n children: [...Array(computedPages)].map((_, idx) => /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => paginate(idx + 1),\n className: `page-btn ${currentPage === idx + 1 ? \"active-page\" : \"\"}`,\n children: idx + 1\n }, idx, false, {\n fileName: _jsxFileName,\n lineNumber: 289,\n columnNumber: 23\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 287,\n columnNumber: 19\n }, this), isMobile && loading && currentPage > 1 && /*#__PURE__*/_jsxDEV(\"p\", {\n children: \"Loading more results...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 303,\n columnNumber: 17\n }, this)]\n }, void 0, true) : /*#__PURE__*/_jsxDEV(\"p\", {\n children: \"No search results found.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 307,\n columnNumber: 13\n }, this) : videoLoading ? /*#__PURE__*/_jsxDEV(\"p\", {\n children: \"Loading videos...\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 310,\n columnNumber: 11\n }, this) : videoResults && videoResults.length > 0 ? /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"results-list\",\n children: videoResults.map((video, idx) => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"result-item\",\n children: [/*#__PURE__*/_jsxDEV(\"a\", {\n href: video.url,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n className: \"result-title\",\n children: video.name\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 315,\n columnNumber: 17\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n dangerouslySetInnerHTML: {\n __html: video.description\n }\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 323,\n columnNumber: 17\n }, this)]\n }, idx, true, {\n fileName: _jsxFileName,\n lineNumber: 314,\n columnNumber: 15\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 312,\n columnNumber: 11\n }, this) : /*#__PURE__*/_jsxDEV(\"p\", {\n children: \"No video results found.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 328,\n columnNumber: 11\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 233,\n columnNumber: 7\n }, this), /*#__PURE__*/_jsxDEV(\"footer\", {\n className: \"footer\",\n children: [/*#__PURE__*/_jsxDEV(\"a\", {\n href: \"https://git.tsugutsugugo.com/explore/repos\",\n children: \"Source\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 332,\n columnNumber: 9\n }, this), \" |\", \" \", /*#__PURE__*/_jsxDEV(\"a\", {\n href: \"https://docs.tsugutsugugo.com/\",\n children: \"Docs\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 333,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 331,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 218,\n columnNumber: 5\n }, this);\n}\n_s(MultiCategoryResults, \"3F9XKMUHIH4ITbuMVa4rtSw3Xr0=\");\n_c = MultiCategoryResults;\nexport default MultiCategoryResults;\nvar _c;\n$RefreshReg$(_c, \"MultiCategoryResults\");","map":{"version":3,"names":["React","useEffect","useState","Link","jsxDEV","_jsxDEV","Fragment","_Fragment","MultiCategoryResults","query","categories","_s","results","setResults","loading","setLoading","videoResults","setVideoResults","videoLoading","setVideoLoading","currentPage","setCurrentPage","viewMode","setViewMode","visitedLinks","setVisitedLinks","stored","localStorage","getItem","JSON","parse","resultsPerPage","numCats","length","pagesPerCat","totalPages","categoryIndex","pageForCategory","Math","floor","fetchCategory","primaryCategory","headerCategory","sourceMap","science","philosophy","tech","discover","headerMap","multi","headerBgMap","appBgMap","isMobile","window","innerWidth","fetchResults","startRecord","url","encodeURIComponent","response","fetch","ok","_data$channels$","data","json","items","channels","prev","allResults","page","_dataPage$channels$","record","responsePage","dataPage","console","error","computedPages","ceil","handleScroll","scrollTop","document","documentElement","body","windowHeight","innerHeight","fullHeight","offsetHeight","prevPage","addEventListener","removeEventListener","paginate","fetchVideoResults","Error","handleLinkClick","includes","newVisited","setItem","stringify","className","style","backgroundColor","children","to","src","alt","fileName","_jsxFileName","lineNumber","columnNumber","id","onClick","map","item","idx","href","link","target","rel","title","dangerouslySetInnerHTML","__html","description","Array","_","video","name","_c","$RefreshReg$"],"sources":["/Users/christian/workspace/search_interface/src/MultiCategoryResults.jsx"],"sourcesContent":["// MultiCategoryResults.jsx\nimport React, { useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport \"./App.css\";\n\nfunction MultiCategoryResults({ query, categories }) {\n const [results, setResults] = useState([]);\n const [loading, setLoading] = useState(false);\n const [videoResults, setVideoResults] = useState([]);\n const [videoLoading, setVideoLoading] = useState(false);\n const [currentPage, setCurrentPage] = useState(1);\n const [viewMode, setViewMode] = useState(\"web\");\n const [visitedLinks, setVisitedLinks] = useState(() => {\n const stored = localStorage.getItem(\"visitedLinks\");\n return stored ? JSON.parse(stored) : [];\n });\n const resultsPerPage = 10;\n const numCats = categories.length;\n\n // Define pages per category according to the rules:\n // 1 category: 9 pages, 2 categories: 4 pages each, 3 categories: 3 pages each, 4+ categories: 2 pages each.\n let pagesPerCat;\n if (numCats === 1) {\n pagesPerCat = 9;\n } else if (numCats === 2) {\n pagesPerCat = 4;\n } else if (numCats === 3) {\n pagesPerCat = 3;\n } else {\n pagesPerCat = 2;\n }\n const totalPages = numCats > 1 ? numCats * pagesPerCat : pagesPerCat;\n\n // Determine which category to fetch.\n // For multiple categories, we rotate through them.\n const categoryIndex = (currentPage - 1) % numCats;\n const pageForCategory = Math.floor((currentPage - 1) / numCats) + 1;\n const fetchCategory = categories[categoryIndex];\n\n // For header and styling, always use the primary category (the first element).\n const primaryCategory = categories[0];\n const headerCategory = primaryCategory;\n\n // URL maps\n const sourceMap = {\n science: \"https://science.tsugutsugugo.com/yacysearch.json\",\n philosophy: \"https://sophos.tsugutsugugo.com/yacysearch.json\",\n tech: \"https://tech.tsugutsugugo.com/yacysearch.json\",\n discover: \"https://web.tsugutsugugo.com/yacysearch.json\",\n };\n\n const headerMap = {\n science: \"/header.png\",\n philosophy: \"/header_philosophy.png\",\n tech: \"/header_tech.png\",\n discover: \"/header_web.png\",\n multi: \"/header_multi.png\",\n };\n\n const headerBgMap = {\n science: \"#f8f8f8\",\n philosophy: \"#ffffff\",\n tech: \"#ffffff\",\n discover: \"#ffffff\",\n multi: \"#ffffff\",\n };\n\n const appBgMap = {\n science: \"#fcfcff\",\n philosophy: \"#ffffff\",\n tech: \"#ffffff\",\n discover: \"#ffffff\",\n multi: \"#ffffff\",\n };\n\n // Determine if mobile based on window width.\n const isMobile = window.innerWidth < 600;\n\n // Fetch results based on current page.\n useEffect(() => {\n const fetchResults = async () => {\n setLoading(true);\n // Calculate the starting record number for this page.\n const startRecord = (pageForCategory - 1) * resultsPerPage;\n // Build the fetch URL.\n const url = `${sourceMap[fetchCategory]}?query=${encodeURIComponent(\n query\n )}&resource=global&urlmaskfilter=.*&prefermaskfilter=&nav=all&maximumRecords=${resultsPerPage}&startRecord=${startRecord}`;\n\n try {\n const response = await fetch(url);\n if (response.ok) {\n const data = await response.json();\n const items = data.channels[0]?.items || [];\n if (isMobile) {\n // For mobile: on page 1, set the results; on subsequent pages, append.\n if (currentPage === 1) {\n setResults(items);\n } else {\n setResults((prev) => [...prev, ...items]);\n }\n } else {\n // Desktop behavior:\n if (numCats > 1) {\n // Multicategory desktop fetch simply replaces results.\n setResults(items);\n } else {\n // For desktop single category, aggregate results over all pages.\n let allResults = [];\n for (let page = 0; page < pagesPerCat; page++) {\n const record = page * resultsPerPage;\n const responsePage = await fetch(\n `${sourceMap[primaryCategory]}?query=${encodeURIComponent(\n query\n )}&resource=global&urlmaskfilter=.*&prefermaskfilter=&nav=all&maximumRecords=${resultsPerPage}&startRecord=${record}`\n );\n if (!responsePage.ok) continue;\n const dataPage = await responsePage.json();\n allResults = [\n ...allResults,\n ...(dataPage.channels[0]?.items || []),\n ];\n }\n setResults(allResults);\n }\n }\n } else {\n console.error(\"Error response from server\");\n }\n } catch (error) {\n console.error(\"Error fetching multi-category results:\", error);\n }\n setLoading(false);\n };\n\n if (viewMode === \"web\") {\n fetchResults();\n }\n }, [\n query,\n currentPage,\n viewMode,\n numCats,\n pageForCategory,\n fetchCategory,\n primaryCategory,\n resultsPerPage,\n pagesPerCat,\n isMobile,\n ]);\n\n // Compute the maximum number of pages.\n // For mobile, we want to stop once we have reached the page limit.\n const computedPages = isMobile\n ? numCats > 1\n ? totalPages\n : pagesPerCat\n : numCats > 1\n ? totalPages\n : Math.ceil(results.length / resultsPerPage);\n\n // For mobile devices, add a scroll event listener to load more results when nearing the bottom.\n useEffect(() => {\n if (isMobile && viewMode === \"web\") {\n const handleScroll = () => {\n const scrollTop =\n document.documentElement.scrollTop || document.body.scrollTop;\n const windowHeight = window.innerHeight;\n const fullHeight = document.documentElement.offsetHeight;\n // When near the bottom and not already loading, request the next page if available.\n if (scrollTop + windowHeight >= fullHeight - 50) {\n if (!loading && currentPage < computedPages) {\n setCurrentPage((prevPage) => prevPage + 1);\n }\n }\n };\n\n window.addEventListener(\"scroll\", handleScroll);\n return () => {\n window.removeEventListener(\"scroll\", handleScroll);\n };\n }\n }, [isMobile, viewMode, loading, currentPage, computedPages]);\n\n // For desktop pagination (when not mobile).\n const paginate = (page) => setCurrentPage(page);\n\n const fetchVideoResults = async () => {\n setVideoLoading(true);\n try {\n const response = await fetch(\n `https://stream.tsugutsugugo.com/api/v1/videos?search=${encodeURIComponent(\n query\n )}`\n );\n if (!response.ok) throw new Error(\"Video API error\");\n const data = await response.json();\n setVideoResults(data.data || []);\n } catch (error) {\n console.error(\"Error fetching video results:\", error);\n } finally {\n setVideoLoading(false);\n }\n };\n\n const handleLinkClick = (url) => {\n setVisitedLinks((prev) => {\n if (!prev.includes(url)) {\n const newVisited = [...prev, url];\n localStorage.setItem(\"visitedLinks\", JSON.stringify(newVisited));\n return newVisited;\n }\n return prev;\n });\n };\n\n return (\n <div\n className=\"App results-page\"\n style={{ backgroundColor: appBgMap[headerCategory] }}\n >\n <header\n className=\"header-bar\"\n style={{ backgroundColor: headerBgMap[headerCategory] }}\n >\n <Link to=\"/\">\n <img\n src={headerMap[headerCategory]}\n alt={`${headerCategory} Header`}\n />\n </Link>\n </header>\n <main className=\"main-content\">\n <div id=\"tagline\">\n Search Results for <strong>{query}</strong>,{\" \"}\n {viewMode === \"web\" ? (\n <span\n className=\"link-switch\"\n onClick={async () => {\n await fetchVideoResults();\n setViewMode(\"video\");\n }}\n >\n browse videos\n </span>\n ) : (\n <span className=\"link-switch\" onClick={() => setViewMode(\"web\")}>\n browse web results\n </span>\n )}\n </div>\n {viewMode === \"web\" ? (\n loading && currentPage === 1 ? (\n <p>Loading results...</p>\n ) : results.length > 0 ? (\n <>\n <ul className=\"results-list\">\n {results.map((item, idx) => (\n <li key={idx} className=\"result-item\">\n <a\n href={item.link}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => handleLinkClick(item.link)}\n className={`result-title ${\n visitedLinks.includes(item.link) ? \"visited-link\" : \"\"\n }`}\n >\n {item.title}\n </a>\n <p dangerouslySetInnerHTML={{ __html: item.description }} />\n <a\n href={`https://web.archive.org/web/*/${item.link}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cache-link\"\n >\n Cache\n </a>\n </li>\n ))}\n </ul>\n {/* Desktop: Render pagination buttons */}\n {!isMobile &&\n window.innerWidth >= 600 &&\n computedPages > 1 && (\n <div className=\"pagination\">\n {[...Array(computedPages)].map((_, idx) => (\n <button\n key={idx}\n onClick={() => paginate(idx + 1)}\n className={`page-btn ${\n currentPage === idx + 1 ? \"active-page\" : \"\"\n }`}\n >\n {idx + 1}\n </button>\n ))}\n </div>\n )}\n {/* Mobile: Optionally indicate that more results are loading */}\n {isMobile && loading && currentPage > 1 && (\n <p>Loading more results...</p>\n )}\n </>\n ) : (\n <p>No search results found.</p>\n )\n ) : videoLoading ? (\n <p>Loading videos...</p>\n ) : videoResults && videoResults.length > 0 ? (\n <ul className=\"results-list\">\n {videoResults.map((video, idx) => (\n <li key={idx} className=\"result-item\">\n <a\n href={video.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"result-title\"\n >\n {video.name}\n </a>\n <p dangerouslySetInnerHTML={{ __html: video.description }} />\n </li>\n ))}\n </ul>\n ) : (\n <p>No video results found.</p>\n )}\n </main>\n <footer className=\"footer\">\n <a href=\"https://git.tsugutsugugo.com/explore/repos\">Source</a> |{\" \"}\n <a href=\"https://docs.tsugutsugugo.com/\">Docs</a>\n </footer>\n </div>\n );\n}\n\nexport default MultiCategoryResults;\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}