summaryrefslogtreecommitdiff
path: root/src/chef/frontend/admin.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/chef/frontend/admin.clj')
-rw-r--r--src/chef/frontend/admin.clj103
1 files changed, 103 insertions, 0 deletions
diff --git a/src/chef/frontend/admin.clj b/src/chef/frontend/admin.clj
new file mode 100644
index 0000000..89a2462
--- /dev/null
+++ b/src/chef/frontend/admin.clj
@@ -0,0 +1,103 @@
+(ns chef.frontend.admin
+ (:require [chef.utils :as cutils]
+ [hiccup2.core :as html]
+ [ring.util.response :as ruresp]
+
+ [chef.logic.categories :as clcategories]
+ [chef.logic.recipes :as clrecipes]))
+
+(defn- render-category [data children]
+ [:li
+ [:p {:style {:display :inline-block}}
+ (if (pos? (:categories/id data))
+ [:input {:type :text :placeholder "Name"
+ :value (:categories/name data)
+ :name "name"
+ :hx-post (str "/api/admin/category/" (:categories/id data))
+ :hx-trigger "change"}]
+ "Startseite")]
+ (when (or (neg? (:categories/id data))
+ (->> (:categories/id data)
+ clcategories/find-categories-with-parent
+ count
+ pos?))
+ (list [:p {:style {:display :inline-block
+ :margin-left "1em"
+ :margin-right "1em"}} "->"]
+ [:input {:type :text :placeholder "Frage"
+ :style {:display :inline-block
+ :width :auto}
+ :value (:categories/question data)
+ :name "question"
+ :hx-post (str "/api/admin/category/" (:categories/id data))
+ :hx-trigger "change"}]))
+ [:img {:src "/static/icons/plus.svg" :height "30em"
+ :style {:vertical-align :middle
+ :margin-left "1em"}
+ :hx-post (str "/api/admin/category/create/"
+ (when (pos? (:categories/id data)) (str "?parent=" (:categories/id data))))
+ :hx-swap "none"}]
+ (when (pos? (:categories/id data))
+ [:img {:src "/static/icons/trash.svg" :height "30em"
+ :style {:vertical-align :middle
+ :margin-left "1em"}
+ :hx-delete (str "/api/admin/category/" (:categories/id data))
+ :hx-swap "none"}])
+ [:ul
+ (for [child children]
+ (->> (:categories/id child)
+ clcategories/find-categories-with-parent
+ (render-category child)))]])
+
+(defn- render-recipe-table-row [recipe]
+ (let [tr-id (str "recipe-" (:recipes/id recipe))]
+ [:tr {:id tr-id}
+ [:td
+ [:p (:recipes/title recipe)]]
+ [:td
+ (let [category (clcategories/get-category (:recipes/category recipe))]
+ [:p (clcategories/generate-path category)])]
+ [:td
+ [:div
+ [:button {:class ["button" "primary"]
+ :onclick (str "window.open(\"/admin/recipe-editor/"
+ (:recipes/id recipe)
+ "\", \"\", \"width=900,height=900\")")}
+ "Bearbeiten"]
+ [:button {:class ["button error"]
+ :hx-trigger "click"
+ :hx-swap :none
+ :hx-delete (str "/api/admin/recipe/" (:recipes/id recipe))}
+ "Löschen"]]]]))
+
+(defn- render []
+ (cutils/gen-page "chef - Admin"
+ [:div {:style {:margin-left "1em"}}
+ [:h1 "chef - Admin"]
+ [:h2 "Kategorien"]
+ [:ul
+ (render-category (clcategories/get-category -1)
+ (clcategories/find-categories-with-parent -1))]
+ [:h2 "Rezepte"]
+ [:table
+ [:tr
+ [:th "Titel"]
+ [:th "Kategorie"]
+ [:th "Aktionen"]]
+ (for [recipe (clrecipes/get-all-recipes)]
+ (render-recipe-table-row recipe))]
+ [:button {:class "button primary"
+ :hx-trigger "click"
+ :hx-swap :none
+ :hx-post "/api/admin/recipe/create/"}
+ "Rezept erstellen"]]))
+
+(defn handler [req]
+ (let [access-token (get-in req [:oauth2/access-tokens :auth])
+ resp (-> (render)
+ html/html
+ str
+ ruresp/response)]
+ (if (some? access-token)
+ (assoc resp :session (assoc (:session req) :oauth-token access-token))
+ (cutils/auth-only req resp))))