Files
isotope-server/routes/website/search.ar
T
2023-08-07 00:44:22 +01:00

39 lines
1.5 KiB
Plaintext

import "server" as *
import "database" as *
import "url.ar" as url
import "bleach.ar" as bleach
import "render" as renderer
let search(req, res) = do
let acc = account.getByToken(req.cookies.get("token", ""))
let query = req.query.get("q", "")
let lowerQuery = query.lower()
let keys = packages.keys()
keys.sort()
let namedSearch = []
let descriptionSearch = []
let results = 0
for (i from 0 to keys.length) do
let name = keys[i]
let package = packages[name]
let element() = "<a href='/package?"+url.queryStr({name:name})+"'><h1>"+bleach.clean(name)+"</h1><p>"+bleach.clean(package.get("short-description",""))+"</p></a>"
if (lowerQuery in name.lower()) do
namedSearch.append(element())
results += 1
continue
else if (lowerQuery in package.get("description", "").lower()) do
descriptionSearch.append(element())
results += 1
continue
let keywords = package.get("keywords", [])
for (j from 0 to keywords.length) do
let keyword = keywords[j].strip()
if (keyword.lower() in lowerQuery) do
descriptionSearch.append(element())
results += 1
break
let render = []
render.extend(namedSearch)
render.extend(descriptionSearch)
res.renderTemplate("search.html", {query:query, numOfResults:results, results:render.join(""), navbar:renderer.navbar(acc)})
app.route("/search", null, search)