diff options
| -rw-r--r-- | pages/shop/index.fnl | 8 | ||||
| -rwxr-xr-x | run.sh | 1 | ||||
| -rw-r--r-- | static/style.css | 17 | ||||
| -rw-r--r-- | synonyms.fnl | 56 |
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"} @@ -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} |
