From 66c51b0e714fa8a1c80784108191270babc8525e Mon Sep 17 00:00:00 2001 From: unwox Date: Sun, 31 Aug 2025 17:51:57 +0600 Subject: implement shop --- pages/index.fnl | 130 ++++++++++++++++++++++---------------------------------- 1 file changed, 50 insertions(+), 80 deletions(-) (limited to 'pages/index.fnl') diff --git a/pages/index.fnl b/pages/index.fnl index 4d8af80..f0ac111 100644 --- a/pages/index.fnl +++ b/pages/index.fnl @@ -1,101 +1,71 @@ +(import-macros {:compile-html <>} :macros) +(local lib (require :lib)) (local templates (require :templates)) -(local html (require :vendor.html)) - -(fn improve-typography [text] - (var result - (-> text - (string.gsub "(\n|\r)" " ") - (string.gsub "%s+" " "))) - (let [nbsp-replaces ["на" "На" "и" "И" "в" "В" "о" "О" "с" "С" "со" "Со" "до" - "До" "для" "Для" "а" "А" "но" "Но" "на" "На" "я" "Я" "мы" - "Мы" "над" "Над" "под" "Под" "г." "Г." "ул." "Ул." - "д." "Д." "%d+"]] - (each [_ v (ipairs nbsp-replaces)] - (set result - (-> result - (string.gsub (.. "( " v ") ") "%1 ") - (string.gsub (.. "(%s" v ") ") " %1 ") - (string.gsub (.. "^(" v ") ") "%1 "))))) - result) - -(fn test-improve-typography [] - (assert (= (improve-typography "Я лежу на пляжу!") - "Я лежу на пляжу!")) - (assert (= (improve-typography "500 рублей мы сняли со счета!") - "500 рублей мы сняли со счета!")) - (assert (= (improve-typography "500 рублей мы - сняли со счета!") - "500 рублей мы сняли со счета!"))) (local texts { :address - (improve-typography + (lib.improve-typography "г. Омск, ул. Пушкина, д. 133/9, этаж 2. Вход с крыльца Магнита, дверь - слева, домофон 4") + слева, домофон 4. Дверь в офисе узнаете по нашему логотипу.") :individual-ceremony - (improve-typography + (lib.improve-typography "Индивидуальная чайная церемония: мастер готовит для вас чай на ваш выбор. О времени встречи договариваемся. Стоимость 1000 рублей с человека, до 5 человек.") :weekly-meetings - (improve-typography + (lib.improve-typography "Еженедельное мероприятие: каждую субботу в 15:00 мы собираемся и пьем чай из нашей коллекции. Для посещения необходима запись в комментариях - под соответствующим постом в нашей группе в телеграме. Стоимость 500 - рублей с человека.") -}) + под соответствующим постом в нашей группе. Стоимость 500 рублей + с человека.")}) (fn pick-gallery-photo [list] (let [chosen (. list (math.random (# list)))] - [:div {} - [:a {:href (.. "static/" chosen.name ".webp") :target "_blank"} - [:img {:src (.. "static/" chosen.name "-p.webp") :alt chosen.alt}]]])) + (<> + [:div {} + [:a {:href (.. "static/" chosen.name ".webp") :target "_blank"} + [:img {:src (.. "static/" chosen.name "-p.webp") :alt chosen.alt}]]]))) -(fn content [] - [[:div {:class "content"} - [:article {:class "article"} - [:img {:class "logo" :src "/static/logo.svg" - :alt "Белая жаба в мультяшном стиле с чайником на голове"}] - [:h1 {} [:NO-ESCAPE "Чайная комната «Белая жаба»"]] - [:nav {} - [:a {:href "https://t.me/whitetoadtea"} "телеграм"] - [:span {} "~"] - [:a {:href "https://vk.com/whitetoadtea"} "вконтакте"]]] - [:article {:class "article"} - [:h2 {} "Адрес"] - [:p {} [:NO-ESCAPE texts.address]]] - [:article {:class "article"} - [:h2 {} "Форматы участия"] - [:ol {} - [:li {} - [:NO-ESCAPE texts.individual-ceremony] - [:div {:class "button-wrapper"} - [:a {:href "https://t.me/whitetoadvlad" :class "button"} "Записаться"]]] - [:li {} - [:NO-ESCAPE texts.weekly-meetings] - [:div {:class "button-wrapper"} - [:a {:href "https://t.me/whitetoadtea" :class "button"} "Подписаться"]]]]]] - [:div {:class "gallery"} - (pick-gallery-photo [{:name "people" :alt "Люди в чайной"} - {:name "gaiwan2" :alt "Близко сфотографированный чайный столик с пиалами и гайванью"} - {:name "teapot2" :alt "Пиала и чайник на фоне гирлянды"}]) - (pick-gallery-photo [{:name "table" :alt "Сфотографированные сверху пиалы на японском столике"}]) - [:div {} - [:video {:autoplay true :loop true :muted true} - [:source {:src "static/boiling-p.webm" :type "video/webm"}]]] - (pick-gallery-photo [{:name "gaiwan" :alt "Гайвань и ширма с гирляндами на фоне"} - {:name "wall" :alt "Белая стена с веером и тенью окна"} - {:name "teapot" :alt "Чайник в темноте на светлом фоне гирлянд"} - {:name "teapot3" :alt "Чайник в руке на фоне растений"}]) - (pick-gallery-photo [{:name "rack" :alt "Стеллаж с чайной посудой"} - {:name "flowers" :alt "Ваза с цветами рядом с чайным столиком"}]) - [:div {} - [:video {:autoplay true :loop true :muted true} - [:source {:src "static/gaiwan-p.webm" :type "video/webm"}]]]]]) +(fn content [authenticated?] + [(<> + [:div {:class "side mb-2"} + (templates.header "" authenticated?) + [:section {:class "mb-2"} + [:h2 {} "Адрес"] + [:p {} [:NO-ESCAPE texts.address]]] + [:section {} + [:h2 {} "Форматы участия"] + [:div {:class "mb-2"} + [:div {:class "mb-1"} [:NO-ESCAPE texts.individual-ceremony]] + [:div {} + [:a {:href "https://t.me/whitetoadvlad"} "Записаться ⟶"]]] + [:div {} + [:div {:class "mb-1"} [:NO-ESCAPE texts.weekly-meetings]] + [:div {} + [:a {:href "https://t.me/whitetoadtea"} "Подписаться ⟶"]]]]]) + (<> + [:div {:class "content"} + [:div {:class "gallery"} + (pick-gallery-photo [{:name "people" :alt "Люди в чайной"} + {:name "gaiwan2" :alt "Близко сфотографированный чайный столик с пиалами и гайванью"} + {:name "teapot2" :alt "Пиала и чайник на фоне гирлянды"}]) + (pick-gallery-photo [{:name "table" :alt "Сфотографированные сверху пиалы на японском столике"}]) + [:div {} + [:video {:autoplay true :loop true :muted true} + [:source {:src "static/boiling-p.webm" :type "video/webm"}]]] + (pick-gallery-photo [{:name "gaiwan" :alt "Гайвань и ширма с гирляндами на фоне"} + {:name "wall" :alt "Белая стена с веером и тенью окна"} + {:name "teapot" :alt "Чайник в темноте на светлом фоне гирлянд"} + {:name "teapot3" :alt "Чайник в руке на фоне растений"}]) + (pick-gallery-photo [{:name "rack" :alt "Стеллаж с чайной посудой"} + {:name "flowers" :alt "Ваза с цветами рядом с чайным столиком"}]) + [:div {} + [:video {:autoplay true :loop true :muted true} + [:source {:src "static/gaiwan-p.webm" :type "video/webm"}]]]]])]) -(fn render [request] - (values 200 {} (html.render (templates.base-template (content)) true))) +(fn render [request _ authenticated?] + (values 200 {} (templates.base (content authenticated?)))) {: render} -- cgit v1.2.3