1 line
14 KiB
JSON
1 line
14 KiB
JSON
{"ast":null,"code":"var _jsxFileName = \"/home/magh/Documents/landing_page/src/ResultsPage.js\",\n _s = $RefreshSig$();\nimport React, { useEffect, useState } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\nimport { jsxDEV as _jsxDEV } from \"react/jsx-dev-runtime\";\nfunction ResultsPage() {\n _s();\n const location = useLocation();\n const navigate = useNavigate();\n\n // Retrieve the state passed via react-router (search query and category)\n const {\n query,\n category\n } = location.state || {};\n const [results, setResults] = useState([]);\n useEffect(() => {\n // If no query or category in state (e.g. user directly navigated), we can early-return or handle it\n if (!query || !category) return;\n\n // Define the base API URL for each category\n const baseUrlMap = {\n science: \"https://science.tsugutsugugo.com/yacysearch.json\",\n philosophy: \"https://philosophy.tsugutsugugo.com/yacysearch.json\",\n tech: \"https://tech.tsugutsugugo.com/yacysearch.json\",\n // add other categories mapping as needed, or a default:\n default: \"https://tsugutsugugo.com/yacysearch.json\"\n };\n const baseUrl = baseUrlMap[category] || baseUrlMap.default;\n\n // Build the full API URL with the query. We request JSON results.\n const apiUrl = `${baseUrl}?query=${encodeURIComponent(query)}&maximumRecords=10`;\n\n // Fetch search results from the YaCy API\n const fetchResults = async () => {\n try {\n var _data$channels, _data$channels$;\n const response = await fetch(apiUrl);\n const data = await response.json();\n // YaCy returns results in data.channels[0].items (OpenSearch format)\n const items = ((_data$channels = data.channels) === null || _data$channels === void 0 ? void 0 : (_data$channels$ = _data$channels[0]) === null || _data$channels$ === void 0 ? void 0 : _data$channels$.items) || [];\n setResults(items);\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n }\n };\n fetchResults();\n }, [query, category]);\n\n // If the page is accessed without state (e.g., direct link or refresh), handle gracefully\n if (!query || !category) {\n return /*#__PURE__*/_jsxDEV(\"div\", {\n children: [/*#__PURE__*/_jsxDEV(\"h2\", {\n children: \"No search query provided.\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 50,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => navigate(\"/\"),\n children: \"Go to Search\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 51,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 49,\n columnNumber: 7\n }, this);\n }\n return /*#__PURE__*/_jsxDEV(\"div\", {\n className: `results-page ${category}-theme`,\n children: [/*#__PURE__*/_jsxDEV(\"header\", {\n className: \"results-header\",\n children: [/*#__PURE__*/_jsxDEV(\"img\", {\n src: `/assets/mascot-${category}.png`,\n alt: `${category} mascot`,\n className: \"mascot-img\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 61,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"h2\", {\n children: [category.charAt(0).toUpperCase() + category.slice(1), \" Search Results for \\\"\", query, \"\\\"\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 66,\n columnNumber: 9\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 59,\n columnNumber: 7\n }, this), results.length === 0 ? /*#__PURE__*/_jsxDEV(\"p\", {\n children: /*#__PURE__*/_jsxDEV(\"em\", {\n children: [\"No results found for \\\"\", query, \"\\\".\"]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 12\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 71,\n columnNumber: 9\n }, this) : /*#__PURE__*/_jsxDEV(\"ul\", {\n className: \"results-list\",\n children: results.map(item => /*#__PURE__*/_jsxDEV(\"li\", {\n className: \"result-item\",\n children: [/*#__PURE__*/_jsxDEV(\"h3\", {\n children: /*#__PURE__*/_jsxDEV(\"a\", {\n href: item.link,\n target: \"_blank\",\n rel: \"noopener noreferrer\",\n children: item.title\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 78,\n columnNumber: 17\n }, this)\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 77,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"p\", {\n children: item.description\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 83,\n columnNumber: 15\n }, this), /*#__PURE__*/_jsxDEV(\"a\", {\n href: `https://web.archive.org/web/*/${encodeURIComponent(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: 85,\n columnNumber: 15\n }, this)]\n }, item.link, true, {\n fileName: _jsxFileName,\n lineNumber: 75,\n columnNumber: 13\n }, this))\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 73,\n columnNumber: 9\n }, this), /*#__PURE__*/_jsxDEV(\"button\", {\n onClick: () => navigate(-1),\n className: \"back-button\",\n children: \"\\u2190 Back to Search\"\n }, void 0, false, {\n fileName: _jsxFileName,\n lineNumber: 99,\n columnNumber: 7\n }, this)]\n }, void 0, true, {\n fileName: _jsxFileName,\n lineNumber: 57,\n columnNumber: 5\n }, this);\n}\n_s(ResultsPage, \"e5p5/A0NSunLoRfs+Y0D+FxZ4Bo=\", false, function () {\n return [useLocation, useNavigate];\n});\n_c = ResultsPage;\nexport default ResultsPage;\nvar _c;\n$RefreshReg$(_c, \"ResultsPage\");","map":{"version":3,"names":["React","useEffect","useState","useLocation","useNavigate","jsxDEV","_jsxDEV","ResultsPage","_s","location","navigate","query","category","state","results","setResults","baseUrlMap","science","philosophy","tech","default","baseUrl","apiUrl","encodeURIComponent","fetchResults","_data$channels","_data$channels$","response","fetch","data","json","items","channels","error","console","children","fileName","_jsxFileName","lineNumber","columnNumber","onClick","className","src","alt","charAt","toUpperCase","slice","length","map","item","href","link","target","rel","title","description","_c","$RefreshReg$"],"sources":["/home/magh/Documents/landing_page/src/ResultsPage.js"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { useLocation, useNavigate } from \"react-router-dom\";\n\nfunction ResultsPage() {\n const location = useLocation();\n const navigate = useNavigate();\n\n // Retrieve the state passed via react-router (search query and category)\n const { query, category } = location.state || {};\n\n const [results, setResults] = useState([]);\n\n useEffect(() => {\n // If no query or category in state (e.g. user directly navigated), we can early-return or handle it\n if (!query || !category) return;\n\n // Define the base API URL for each category\n const baseUrlMap = {\n science: \"https://science.tsugutsugugo.com/yacysearch.json\",\n philosophy: \"https://philosophy.tsugutsugugo.com/yacysearch.json\",\n tech: \"https://tech.tsugutsugugo.com/yacysearch.json\",\n // add other categories mapping as needed, or a default:\n default: \"https://tsugutsugugo.com/yacysearch.json\"\n };\n const baseUrl = baseUrlMap[category] || baseUrlMap.default;\n\n // Build the full API URL with the query. We request JSON results.\n const apiUrl = `${baseUrl}?query=${encodeURIComponent(query)}&maximumRecords=10`;\n\n // Fetch search results from the YaCy API\n const fetchResults = async () => {\n try {\n const response = await fetch(apiUrl);\n const data = await response.json();\n // YaCy returns results in data.channels[0].items (OpenSearch format)\n const items = data.channels?.[0]?.items || [];\n setResults(items);\n } catch (error) {\n console.error(\"Error fetching search results:\", error);\n }\n };\n\n fetchResults();\n }, [query, category]);\n\n // If the page is accessed without state (e.g., direct link or refresh), handle gracefully\n if (!query || !category) {\n return (\n <div>\n <h2>No search query provided.</h2>\n <button onClick={() => navigate(\"/\")}>Go to Search</button>\n </div>\n );\n }\n\n return (\n <div className={`results-page ${category}-theme`}>\n {/* Apply a dynamic class for background theme based on category */}\n <header className=\"results-header\">\n {/* Display the category mascot and name in the header */}\n <img\n src={`/assets/mascot-${category}.png`}\n alt={`${category} mascot`}\n className=\"mascot-img\"\n />\n <h2>{category.charAt(0).toUpperCase() + category.slice(1)} Search Results for \"{query}\"</h2>\n </header>\n\n {/* Results List */}\n {results.length === 0 ? (\n <p><em>No results found for \"{query}\".</em></p>\n ) : (\n <ul className=\"results-list\">\n {results.map(item => (\n <li key={item.link} className=\"result-item\">\n {/* Title as a clickable link to the original source */}\n <h3>\n <a href={item.link} target=\"_blank\" rel=\"noopener noreferrer\">\n {item.title}\n </a>\n </h3>\n {/* Description snippet */}\n <p>{item.description}</p>\n {/* \"Cache\" link pointing to Internet Archive (Wayback Machine) for the item */}\n <a\n href={`https://web.archive.org/web/*/${encodeURIComponent(item.link)}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"cache-link\"\n >\n Cache\n </a>\n </li>\n ))}\n </ul>\n )}\n\n {/* Back button to return to search page */}\n <button onClick={() => navigate(-1)} className=\"back-button\">\n ← Back to Search\n </button>\n </div>\n );\n}\n\nexport default ResultsPage;\n"],"mappings":";;AAAA,OAAOA,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAClD,SAASC,WAAW,EAAEC,WAAW,QAAQ,kBAAkB;AAAC,SAAAC,MAAA,IAAAC,OAAA;AAE5D,SAASC,WAAWA,CAAA,EAAG;EAAAC,EAAA;EACrB,MAAMC,QAAQ,GAAGN,WAAW,CAAC,CAAC;EAC9B,MAAMO,QAAQ,GAAGN,WAAW,CAAC,CAAC;;EAE9B;EACA,MAAM;IAAEO,KAAK;IAAEC;EAAS,CAAC,GAAGH,QAAQ,CAACI,KAAK,IAAI,CAAC,CAAC;EAEhD,MAAM,CAACC,OAAO,EAAEC,UAAU,CAAC,GAAGb,QAAQ,CAAC,EAAE,CAAC;EAE1CD,SAAS,CAAC,MAAM;IACd;IACA,IAAI,CAACU,KAAK,IAAI,CAACC,QAAQ,EAAE;;IAEzB;IACA,MAAMI,UAAU,GAAG;MACjBC,OAAO,EAAE,kDAAkD;MAC3DC,UAAU,EAAE,qDAAqD;MACjEC,IAAI,EAAE,+CAA+C;MACrD;MACAC,OAAO,EAAE;IACX,CAAC;IACD,MAAMC,OAAO,GAAGL,UAAU,CAACJ,QAAQ,CAAC,IAAII,UAAU,CAACI,OAAO;;IAE1D;IACA,MAAME,MAAM,GAAG,GAAGD,OAAO,UAAUE,kBAAkB,CAACZ,KAAK,CAAC,oBAAoB;;IAEhF;IACA,MAAMa,YAAY,GAAG,MAAAA,CAAA,KAAY;MAC/B,IAAI;QAAA,IAAAC,cAAA,EAAAC,eAAA;QACF,MAAMC,QAAQ,GAAG,MAAMC,KAAK,CAACN,MAAM,CAAC;QACpC,MAAMO,IAAI,GAAG,MAAMF,QAAQ,CAACG,IAAI,CAAC,CAAC;QAClC;QACA,MAAMC,KAAK,GAAG,EAAAN,cAAA,GAAAI,IAAI,CAACG,QAAQ,cAAAP,cAAA,wBAAAC,eAAA,GAAbD,cAAA,CAAgB,CAAC,CAAC,cAAAC,eAAA,uBAAlBA,eAAA,CAAoBK,KAAK,KAAI,EAAE;QAC7ChB,UAAU,CAACgB,KAAK,CAAC;MACnB,CAAC,CAAC,OAAOE,KAAK,EAAE;QACdC,OAAO,CAACD,KAAK,CAAC,gCAAgC,EAAEA,KAAK,CAAC;MACxD;IACF,CAAC;IAEDT,YAAY,CAAC,CAAC;EAChB,CAAC,EAAE,CAACb,KAAK,EAAEC,QAAQ,CAAC,CAAC;;EAErB;EACA,IAAI,CAACD,KAAK,IAAI,CAACC,QAAQ,EAAE;IACvB,oBACEN,OAAA;MAAA6B,QAAA,gBACE7B,OAAA;QAAA6B,QAAA,EAAI;MAAyB;QAAAC,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAI,CAAC,eAClCjC,OAAA;QAAQkC,OAAO,EAAEA,CAAA,KAAM9B,QAAQ,CAAC,GAAG,CAAE;QAAAyB,QAAA,EAAC;MAAY;QAAAC,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAQ,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACxD,CAAC;EAEV;EAEA,oBACEjC,OAAA;IAAKmC,SAAS,EAAE,gBAAgB7B,QAAQ,QAAS;IAAAuB,QAAA,gBAE/C7B,OAAA;MAAQmC,SAAS,EAAC,gBAAgB;MAAAN,QAAA,gBAEhC7B,OAAA;QACEoC,GAAG,EAAE,kBAAkB9B,QAAQ,MAAO;QACtC+B,GAAG,EAAE,GAAG/B,QAAQ,SAAU;QAC1B6B,SAAS,EAAC;MAAY;QAAAL,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OACvB,CAAC,eACFjC,OAAA;QAAA6B,QAAA,GAAKvB,QAAQ,CAACgC,MAAM,CAAC,CAAC,CAAC,CAACC,WAAW,CAAC,CAAC,GAAGjC,QAAQ,CAACkC,KAAK,CAAC,CAAC,CAAC,EAAC,wBAAqB,EAACnC,KAAK,EAAC,IAAC;MAAA;QAAAyB,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAI,CAAC;IAAA;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACtF,CAAC,EAGRzB,OAAO,CAACiC,MAAM,KAAK,CAAC,gBACnBzC,OAAA;MAAA6B,QAAA,eAAG7B,OAAA;QAAA6B,QAAA,GAAI,yBAAsB,EAACxB,KAAK,EAAC,KAAE;MAAA;QAAAyB,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAAI;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAAG,CAAC,gBAE/CjC,OAAA;MAAImC,SAAS,EAAC,cAAc;MAAAN,QAAA,EACzBrB,OAAO,CAACkC,GAAG,CAACC,IAAI,iBACf3C,OAAA;QAAoBmC,SAAS,EAAC,aAAa;QAAAN,QAAA,gBAEzC7B,OAAA;UAAA6B,QAAA,eACE7B,OAAA;YAAG4C,IAAI,EAAED,IAAI,CAACE,IAAK;YAACC,MAAM,EAAC,QAAQ;YAACC,GAAG,EAAC,qBAAqB;YAAAlB,QAAA,EAC1Dc,IAAI,CAACK;UAAK;YAAAlB,QAAA,EAAAC,YAAA;YAAAC,UAAA;YAAAC,YAAA;UAAA,OACV;QAAC;UAAAH,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OACF,CAAC,eAELjC,OAAA;UAAA6B,QAAA,EAAIc,IAAI,CAACM;QAAW;UAAAnB,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAI,CAAC,eAEzBjC,OAAA;UACE4C,IAAI,EAAE,iCAAiC3B,kBAAkB,CAAC0B,IAAI,CAACE,IAAI,CAAC,EAAG;UACvEC,MAAM,EAAC,QAAQ;UACfC,GAAG,EAAC,qBAAqB;UACzBZ,SAAS,EAAC,YAAY;UAAAN,QAAA,EACvB;QAED;UAAAC,QAAA,EAAAC,YAAA;UAAAC,UAAA;UAAAC,YAAA;QAAA,OAAG,CAAC;MAAA,GAjBGU,IAAI,CAACE,IAAI;QAAAf,QAAA,EAAAC,YAAA;QAAAC,UAAA;QAAAC,YAAA;MAAA,OAkBd,CACL;IAAC;MAAAH,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OACA,CACL,eAGDjC,OAAA;MAAQkC,OAAO,EAAEA,CAAA,KAAM9B,QAAQ,CAAC,CAAC,CAAC,CAAE;MAAC+B,SAAS,EAAC,aAAa;MAAAN,QAAA,EAAC;IAE7D;MAAAC,QAAA,EAAAC,YAAA;MAAAC,UAAA;MAAAC,YAAA;IAAA,OAAQ,CAAC;EAAA;IAAAH,QAAA,EAAAC,YAAA;IAAAC,UAAA;IAAAC,YAAA;EAAA,OACN,CAAC;AAEV;AAAC/B,EAAA,CApGQD,WAAW;EAAA,QACDJ,WAAW,EACXC,WAAW;AAAA;AAAAoD,EAAA,GAFrBjD,WAAW;AAsGpB,eAAeA,WAAW;AAAC,IAAAiD,EAAA;AAAAC,YAAA,CAAAD,EAAA","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]} |