diff options
| author | ckonstanski <kostcarl@isu.edu> | 2026-07-29 21:59:34 -0600 |
|---|---|---|
| committer | ckonstanski <kostcarl@isu.edu> | 2026-07-29 21:59:34 -0600 |
| commit | be4663059d4395fec8aa1807e202fb466a0ed282 (patch) | |
| tree | b2cb52b902c46a9bf711c9aae417c516ddceb5b2 /lisp/webapps/resume/clojurescript | |
| parent | 099c7331a5c5a3e1948c8c4f97d76a20de97bb39 (diff) | |
clojurescript macro
Diffstat (limited to 'lisp/webapps/resume/clojurescript')
| -rw-r--r-- | lisp/webapps/resume/clojurescript/resume/src/resume/core.cljs (renamed from lisp/webapps/resume/clojurescript/resume/src/core.cljs) | 62 | ||||
| -rw-r--r-- | lisp/webapps/resume/clojurescript/resume/src/resume/util.clj | 92 | ||||
| -rw-r--r-- | lisp/webapps/resume/clojurescript/resume/src/resume/util.cljs | 2 |
3 files changed, 142 insertions, 14 deletions
diff --git a/lisp/webapps/resume/clojurescript/resume/src/core.cljs b/lisp/webapps/resume/clojurescript/resume/src/resume/core.cljs index 0a3e6c2..7b5747d 100644 --- a/lisp/webapps/resume/clojurescript/resume/src/core.cljs +++ b/lisp/webapps/resume/clojurescript/resume/src/resume/core.cljs @@ -10,7 +10,8 @@ [reagent.dom :as rd] [reagent.dom.client :as rdc] [org-ckons-cljs.notifications.react :as ck-notifications] - [org-ckons-cljs.form.core :as ck-form])) + [org-ckons-cljs.form.core :as ck-form] + [resume.util :as util])) ;; declarations @@ -149,6 +150,7 @@ (declare on-resume-delete-clicked) (declare handler-resume-delete) (declare render-resume-delete) + (declare template-contactinfo) (declare handler-contactinfo) (declare render-contactinfo) @@ -172,6 +174,7 @@ (declare on-contactinfo-delete-clicked) (declare handler-contactinfo-delete) (declare render-contactinfo-delete) + (declare template-education) (declare handler-education) (declare render-education) @@ -1121,6 +1124,38 @@ ;; resume +(defn generic-table [component jsonobj & [reverse-p]] + (let [results (get jsonobj "components") + keys (remove (fn [x] + (not (get (first results) x))) + (sort #(if reverse-p (compare %2 %1) (compare %1 %2)) (keys (first results))))] + (cond (empty? results) + [:h5 {:style "text-align: center"} (str "No " component "s found.")] + :else + [:div + [:p (str (count results) " " component "s.")] + [:table {:class "table table-striped table-hover table-sm"} + [:thead + [:tr + (for [key keys] + [:th {:scope "col"} key]) + [:th {:scope "col"} "Mod"] + [:th {:scope "col"} "Del"]]] + [:tbody + (for [rec results] + [:tr + (for [key keys] + [:td (str (get rec key))]) + [:td {:width "30"} + [:img {:src "/static/images/modify.png" + :onclick (str (namespace ::x) ".on_" component "_modify_clicked(" (get rec "id") ")")}]] + [:td {:width "30"} + [:img {:src "/static/images/delete.png" + :onclick (str (namespace ::x) ".on_" component "_delete_clicked(" (get rec "id") "')")}]]])]]]))) + +(hiccups/defhtml generic-component-add [jsonobj] + (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) + (hiccups/defhtml template-resume [jsonobj] [:h3 {:style "text-align: center"} (get jsonobj "title")] [:div {:id "content"}] @@ -1153,7 +1188,7 @@ (render-resume-view))) (defn render-resume [] - (GET "/resume" {:handler handler-resume})) + (GET "/resume/resume" {:handler handler-resume})) ;; resume-view @@ -1184,7 +1219,7 @@ (dommy/set-html! (dommy/sel1 :#content) (template-resume-view jsonobj)))) (defn render-resume-view [] - (GET "/resume/view" {:handler handler-resume-view})) + (GET "/resume/resume/view" {:handler handler-resume-view})) ;; resume-add @@ -1202,7 +1237,7 @@ (.modal (jquery "#modify")))) (defn render-resume-add [] - (POST "/resume/add" {:handler handler-resume-add})) + (POST "/resume/resume/add" {:handler handler-resume-add})) ;; resume-add-submit @@ -1216,10 +1251,10 @@ (defn handler-resume-add-submit [response] (let [jsonobj (js->clj (js/JSON.parse response))] (auth-notifications jsonobj) - (on-menu-clicked "/resume"))) + (on-menu-clicked "/resume/resume"))) (defn render-resume-add-submit [] - (POST "/resume/add/submit" + (POST "/resume/resume/add/submit" {:format :raw :params {:name (dommy/value (dommy/sel1 :#name))} :handler handler-resume-add-submit})) @@ -1240,7 +1275,7 @@ (.modal (jquery "#modify")))) (defn render-resume-modify [id] - (POST "/resume/modify" + (POST "/resume/resume/modify" {:format :raw :params {:id id} :handler handler-resume-modify})) @@ -1257,10 +1292,10 @@ (defn handler-resume-modify-submit [response] (let [jsonobj (js->clj (js/JSON.parse response))] (auth-notifications jsonobj) - (on-menu-clicked "/resume"))) + (on-menu-clicked "/resume/resume"))) (defn render-resume-modify-submit [] - (POST "/resume/modify/submit" + (POST "/resume/resume/modify/submit" {:format :raw :params {:id (dommy/value (dommy/sel1 :#id)) :name (dommy/value (dommy/sel1 :#name))} @@ -1275,10 +1310,10 @@ (defn handler-resume-delete [response] (let [jsonobj (js->clj (js/JSON.parse response))] (auth-notifications jsonobj) - (on-menu-clicked "/resume"))) + (on-menu-clicked "/resume/resume"))) (defn render-resume-delete [id] - (DELETE (str "/resume/delete/" id) + (DELETE (str "/resume/resume/delete/" id) {:format :raw :handler handler-resume-delete})) @@ -2015,12 +2050,11 @@ (= handler "/contact-us") (render-contact-us) (= handler "/messages") (render-messages) (= handler "/users") (render-users) - (= handler "/resume") (render-resume) + (= handler "/resume/resume") (render-resume) (= handler "/resume/contactinfo") (render-contactinfo) (= handler "/resume/education") (render-education) (= handler "/resume/language") (render-language) - (= handler "/resume/skill") (render-skill) - (= handler "/resume/job") (render-job))) + (= handler "/resume/skill") (render-skill))) (defn handler-location [response] (let [jsonobj (js->clj (js/JSON.parse response))] diff --git a/lisp/webapps/resume/clojurescript/resume/src/resume/util.clj b/lisp/webapps/resume/clojurescript/resume/src/resume/util.clj new file mode 100644 index 0000000..16276b3 --- /dev/null +++ b/lisp/webapps/resume/clojurescript/resume/src/resume/util.clj @@ -0,0 +1,92 @@ +(ns resume.util) + +(defmacro define-resume-component [component] + `(do + (declare ~(symbol (str "template-" component))) + (declare ~(symbol (str "handler-" component))) + (declare ~(symbol (str "render-" component))) + (declare ~(symbol (str "template-" component "-view"))) + (declare ~(symbol (str "handler-" component "-view"))) + (declare ~(symbol (str "render-" component "-view"))) + (declare ~(symbol (str "on-" component "-add-clicked"))) + (declare ~(symbol (str "template-" component "-add"))) + (declare ~(symbol (str "handler-" component "-add"))) + (declare ~(symbol (str "render-" component "-add"))) + (declare ~(symbol (str "on-" component "-add-submit-clicked"))) + (declare ~(symbol (str "handler-" component "-add-submit"))) + (declare ~(symbol (str "render-" component "-add-submit"))) + (declare ~(symbol (str "on-" component "-modify-clicked"))) + (declare ~(symbol (str "template-" component "-modify"))) + (declare ~(symbol (str "handler-" component "-modify"))) + (declare ~(symbol (str "render-" component "-modify"))) + (declare ~(symbol (str "on-" component "-modify-submit-clicked"))) + (declare ~(symbol (str "handler-" component "-modify-submit"))) + (declare ~(symbol (str "render-" component "-modify-submit"))) + (declare ~(symbol (str "on-" component" -delete-clicked"))) + (declare ~(symbol (str "handler-" component "-delete"))) + (declare ~(symbol (str "render-" component "-delete"))) + + (defn ~(symbol (str "handler-" component)) [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (notifications jsonobj) + (dommy/set-html! (dommy/sel1 :#body) (template-resume jsonobj)) + (~(symbol (str "template-" component "-view"))))) + + (defn ~(symbol (str "render-" component)) [] + (GET ~(str "/resume/" component) {:handler handler-resume})) + + (hiccups/defhtml ~(symbol (str "template-" component "-view")) [jsonobj] + [:div {:style "text-align: right"} + [:img {:src "/static/images/add.png" + :style "cursor:pointer; cursor:hand" + :onclick (str (namespace ::x) ".on_contactinfo_add_clicked()")}]] + (generic-table ~component jsonobj)) + + (defn ~(symbol (str "handler-" component "-view")) [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (dommy/set-html! (dommy/sel1 :#content) (template-contactinfo-view jsonobj)))) + + (defn ~(symbol (str "render-" component "-view")) [] + (GET ~(str "/resume/" component "/view") + {:handler ~(symbol (str "handler-" component "-view"))})) + + (defn ~(symbol (str "on-" component "-add-clicked")) [] + (~(symbol (str "render-" component "-add")))) + + (hiccups/defhtml template-component-add [jsonobj] + (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) + + (defn ~(symbol (str "handler-" component "-add")) [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (dommy/set-html! (dommy/sel1 :#modify-title) (get jsonobj "title")) + (dommy/set-html! (dommy/sel1 :#modify-body) (generic-component-add jsonobj)) + (.modal (jquery "#modify")))) + + (defn ~(symbol (str "render-" component "-add")) [] + (POST ~(str "/resume/" component "/add") + {:handler ~(symbol (str "handler-" component "-add"))})) + + (defn ~(symbol (str "on-" component "-add-submit-clicked")) [] + (when (-> (jquery "#contactinfo-add-form") + (.get "0") + (.checkValidity)) + (.modal (jquery "#modify") "hide") + (~(symbol (str "render-" component "-add-submit"))))) + + (defn ~(symbol (str "handler-" component "-add-submit")) [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked ~(str "/resume/" component)))) + + (defn ~(symbol (str "render-" component "-add-submit")) [] + (POST ~(str "/resume/" component "/add/submit") + {:format :raw + :params {:address (dommy/value (dommy/sel1 :#address)) + :city (dommy/value (dommy/sel1 :#city)) + :state_id (dommy/value (dommy/sel1 :#state_id)) + :phone (dommy/value (dommy/sel1 :#phone)) + :email (dommy/value (dommy/sel1 :#email)) + :url (dommy/value (dommy/sel1 :#url)) + :visastatus_id (dommy/value (dommy/sel1 :#visastatus_id))} + :handler ~(symbol (str "handler-" component "-add-submit"))})))) diff --git a/lisp/webapps/resume/clojurescript/resume/src/resume/util.cljs b/lisp/webapps/resume/clojurescript/resume/src/resume/util.cljs new file mode 100644 index 0000000..b9d75a3 --- /dev/null +++ b/lisp/webapps/resume/clojurescript/resume/src/resume/util.cljs @@ -0,0 +1,2 @@ +(ns resume.util + (:require-macros [resume.util])) |
