(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
"г. Омск, ул. Пушкина, д. 133/9, этаж 2. Вход с крыльца Магнита, дверь
слева, домофон 4")
:individual-ceremony
(improve-typography
"Индивидуальная чайная церемония: мастер готовит для вас чай на ваш выбор.
О времени встречи договариваемся. Стоимость 1000 рублей с человека,
до 5 человек.")
:weekly-meetings
(improve-typography
"Еженедельное мероприятие: каждую субботу в 15:00 мы собираемся и пьем
чай из нашей коллекции. Для посещения необходима запись в комментариях
под соответствующим постом в нашей группе в телеграме. Стоимость 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}]]]))
(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 render [request]
(values 200 {} (html.render (templates.base-template (content)) true)))
{: render}