(ns chef.frontend.visitor.recipe (:require [chef.utils :as cutils] [clojure.string :as cstr] [hiccup2.core :as html] [ring.util.response :as ruresp] [chef.logic.recipes :as clrecipes] [chef.logic.categories :as clcategories])) (defn- render [portions recipe] (cutils/gen-page (str "chef - " (:recipes/title recipe)) [:div {:style {:margin "2em auto" :width :fit-content} :class "card"} [:div {:style {:width :inherit}} [:h1 {:style {:display :inline-block :margin-right "0.5em"}} (:recipes/title recipe)] [:i (str "(" (-> (:recipes/category recipe) clcategories/get-category clcategories/generate-path) ")")]] (when (some? (clrecipes/get-recipe-thumbnail (:recipes/id recipe))) [:img {:src (str "/recipes/" (:recipes/id recipe) "/thumbnail") :width "50%" :style {:border-radius "10px"}}]) [:h2 {:style {:width :inherit}} "Zutaten pro " [:input {:type :number :value portions :style {:width "3em" :display :inline-block} "_" "on change go to url `?portions=${value of me}`"}] (condp = (:recipes/unit recipe) 0 " Portion(en)" 1 " Person(en)" "") ":"] [:ul {:style {:width :inherit}} (for [ingredient (-> recipe :recipes/ingredients cutils/parse-ingredients)] [:li [:b (:description ingredient)] ": " (* (:amount ingredient) portions) (:unit ingredient)])] [:h2 {:style {:width :inherit}} "Zubereitung"] (->> (:recipes/preparation recipe) cstr/split-lines (map #(if (cstr/blank? %) [:br] [:p {:style {:width :inherit}} %])))])) (defn handler [req] (->> (clrecipes/get-recipe (get-in req [:path-params :id])) (render (or (cutils/s->int-or-nil (get-in req [:params "portions"])) 1)) html/html str ruresp/response))