1 line
38 KiB
JSON
1 line
38 KiB
JSON
{"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 // Multi‑category 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 // Multi‑category 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":[]} |