summaryrefslogtreecommitdiff
path: root/bin/serve.fnl
diff options
context:
space:
mode:
Diffstat (limited to 'bin/serve.fnl')
-rw-r--r--bin/serve.fnl56
1 files changed, 29 insertions, 27 deletions
diff --git a/bin/serve.fnl b/bin/serve.fnl
index bec5a94..d4dbf4c 100644
--- a/bin/serve.fnl
+++ b/bin/serve.fnl
@@ -105,9 +105,23 @@
[:div {} "Всего результатов: " [:strong {} (string.format "%d" total)]]]
""))
-(fn base-template [query sort page total ...]
+(fn aside-template [query tags paginator]
+ [:aside {:class "aside"}
+ [:div {:class "aside-content"}
+ (if (~= query "")
+ [:a {:href "/" :style "display: block;"}
+ [:img {:class "logo" :src "static/logo.svg"
+ :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}]]
+ [:img {:class "logo" :src "static/logo.svg"
+ :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}])
+ [:form {:class "form"}
+ [:input {:type :search :name :query :value query
+ :autofocus true :placeholder "Поисковый запрос"}]
+ [:button {:type :submit} "Искать"]]
+ paginator]])
+
+(fn base-template [query tags page total ...]
(local paginator (paginator-template query page 48 total))
-
[:html {:lang "en"}
[:head {}
[:meta {:charset "UTF-8"}]
@@ -116,19 +130,7 @@
[:body {}
[:div {:class "container"}
[:div {:class "content"}
- [:aside {:class "aside"}
- [:div {:class "aside-content"}
- (if (~= query "")
- [:a {:href "/" :style "display: block;"}
- [:img {:class "logo" :src "static/logo.svg"
- :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}]]
- [:img {:class "logo" :src "static/logo.svg"
- :alt "Логотип meicha.ru" :title "Логотип meicha.ru"}])
- [:form {:class "form"}
- [:input {:type :search :name :query :value query
- :autofocus true :placeholder "Поисковый запрос"}]
- [:button {:type :submit} "Искать"]]
- paginator]]
+ (aside-template query tags paginator)
[:section {}
[:div {:class "list"} ...]
[:footer {} paginator]]]]]])
@@ -137,8 +139,7 @@
(assert (< 0 limit) "limit must be > 0")
(luna.db.query*
db
- "SELECT id,
- site,
+ "SELECT site,
title,
description,
image,
@@ -167,14 +168,13 @@
"SELECT count(*)
FROM search
WHERE search.`table` = 'products'
- AND search.name MATCH ?"
+ AND search.title MATCH ?"
[query]))
{:results
(luna.db.query*
db
- "SELECT products.id,
- highlight(search, 0, '<i>', '</i>') AS \"title\",
+ "SELECT highlight(search, 0, '<i>', '</i>') AS \"title\",
products.site,
products.description,
products.image,
@@ -182,11 +182,13 @@
products.price,
products.weight,
products.price_per AS \"price-per\",
- products.year
+ products.year,
+ products.archived,
+ products.creation_time AS \"creation-time\"
FROM search
- INNER JOIN products ON search.fid = products.id
+ INNER JOIN products ON search.fid = products.url
WHERE search.`table` = 'products'
- AND search.name MATCH ?
+ AND search.title MATCH ?
ORDER BY rank
LIMIT 48 OFFSET ?"
[query (* (- page 1) 48)])
@@ -198,17 +200,17 @@
(if (= path "/")
(let [headers {:content-type "text/html"}
page (or (tonumber query.page) 1)
- search (or query.query "")
- sort "ASC"
+ search (str.trim (or query.query ""))
+ tags (or query.tags [])
{: results : total}
(if (~= "" search)
- (query-products page search sort)
+ (query-products page search)
{:total 48 :results (random-products 48)})]
(values
200 headers
(html.render
(base-template
- search sort page total
+ search tags page total
(table.unpack (map #(item-template $2) results)))
true)))
(values 404 {} "not found")))