summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pages/shop/index.fnl8
-rwxr-xr-xrun.sh1
-rw-r--r--static/style.css17
-rw-r--r--synonyms.fnl56
4 files changed, 74 insertions, 8 deletions
diff --git a/pages/shop/index.fnl b/pages/shop/index.fnl
index 6b0f79b..58ff288 100644
--- a/pages/shop/index.fnl
+++ b/pages/shop/index.fnl
@@ -3,6 +3,7 @@
(local shop (require :shop))
(local dicts (require :dicts))
(local templates (require :templates))
+(local synonyms (require :synonyms))
(fn all-products [db filters authenticated?]
(local where-stmts [])
@@ -18,7 +19,10 @@
(when filters.search
(table.insert where-stmts "products_search MATCH ?")
- (table.insert where-args filters.search)
+ (var query (synonyms.replace filters.search))
+ (when (not (lib.ends-with? query "*"))
+ (set query (.. query "*")))
+ (table.insert where-args query)
(set has-search-query? true))
(local where
@@ -109,7 +113,7 @@
[:a {:style "white-space: nowrap; margin-left: 1rem;"
:href (.. "/shop/order/list")} "☰ Список заказов"]])
"")
- [:form {:class "d-flex gap-0-5 mb-1"}
+ [:form {:class "d-flex-desktop gap-0-5 mb-1"}
[:input {:name "search" :type "search"
:placeholder "Поиск" :value (or filters.search "")}]
[:select {:name "type"}
diff --git a/run.sh b/run.sh
index 2b11a1f..51e7473 100755
--- a/run.sh
+++ b/run.sh
@@ -30,6 +30,7 @@ deploy () {
scp dicts.fnl root@everytea.ru:~/whitetoad.ru/
scp templates.fnl root@everytea.ru:~/whitetoad.ru/
scp shop.fnl root@everytea.ru:~/whitetoad.ru/
+ scp synonyms.fnl root@everytea.ru:~/whitetoad.ru/
ssh root@everytea.ru -- systemctl restart whitetoad
git stash pop
}
diff --git a/static/style.css b/static/style.css
index 17b1d26..55b6368 100644
--- a/static/style.css
+++ b/static/style.css
@@ -440,6 +440,11 @@ p {
margin-bottom: 1rem;
}
+input:not([type=checkbox]),
+select {
+ height: 1.75rem;
+}
+
.form {
display: flex;
flex-direction: column;
@@ -474,11 +479,6 @@ p {
width: 100%;
}
-.form-row input:not([type=checkbox]),
-.form-row select {
- height: 1.75rem;
-}
-
.form-file-img {
width: 5.25rem;
height: 5.25rem;
@@ -548,7 +548,8 @@ p {
display: block !important;
}
-.d-flex {
+.d-flex,
+.d-flex-desktop {
display: flex !important;
}
@@ -650,6 +651,10 @@ p {
.shop-item-img {
width: 100%;
}
+
+ .d-flex-desktop {
+ flex-direction: column;
+ }
}
@media (prefers-color-scheme: dark) {
diff --git a/synonyms.fnl b/synonyms.fnl
new file mode 100644
index 0000000..29e2b96
--- /dev/null
+++ b/synonyms.fnl
@@ -0,0 +1,56 @@
+(local lib (require :lib))
+
+(local synonyms
+ [["шэн" "шен"]
+ ["бан" "бань"]
+ ["чжан" "чжань"]
+ ["чжень" "чжэнь"]
+ ["билочунь" "би ло чунь"]
+ ["бутылка" "термос"]
+ ["доска" "чабань"]
+ ["даньцун" "дяньцун" "дянь цун" "дань цун"]
+ ["фаньгу" "фань гу" "фангу" "фан гу"]
+ ["бай му дань" "баймудань"]
+ ["бай хао" "байхао"]
+ ["гуанбай" "гуан бай"]
+ ["буланшань" "булан шань"]
+ ["биндао" "бин дао"]
+ ["лунцзин" "лун цзин"]
+ ["термос" "бутылка"]
+ ["чахай" "сливник"]
+ ["те гуань инь" "те гуаньинь" "тегуань инь" "тегуаньинь"]
+ ["фан гу" "фангу" "фаньгу" "фань гу"]
+ ["точа" "то ча"]
+ ["гушу" "гу шу"]])
+
+(fn find-synonyms [word]
+ (var input-word (_G.must (luna.utf8.lower word)))
+ (var result nil)
+ (each [_ synonyms-line (ipairs synonyms) &until result]
+ (each [_ synonym-word (ipairs synonyms-line) &until result]
+ (when (= input-word synonym-word)
+ (set result synonyms-line))))
+ result)
+
+(fn replace [line]
+ (var results [])
+ (let [words (lib.split line " ")
+ words-count (# words)]
+ (for [i 1 words-count]
+ (var word nil)
+ (for [j i words-count]
+ (set word
+ (if (not word)
+ (. words j)
+ (.. word " " (. words j))))
+ (table.insert results word))))
+ (var final-result line)
+ (each [_ result (ipairs results)]
+ (local synonyms (find-synonyms result))
+ (when synonyms
+ (var query (.. (table.concat synonyms "* OR ") "*"))
+ (set final-result
+ (: final-result :gsub result query))))
+ final-result)
+
+{: replace}