summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/service/menu-service.lisp2
-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.clj92
-rw-r--r--lisp/webapps/resume/clojurescript/resume/src/resume/util.cljs2
-rw-r--r--lisp/webapps/resume/site.lisp14
5 files changed, 150 insertions, 22 deletions
diff --git a/lisp/service/menu-service.lisp b/lisp/service/menu-service.lisp
index 608f23a..e213069 100644
--- a/lisp/service/menu-service.lisp
+++ b/lisp/service/menu-service.lisp
@@ -4,7 +4,7 @@
(in-package :resume)
(defparameter *menu-config* '((:id "a_menu_home" :label "Home" :handler "/home" :permissions "_Public")
- (:id "a_menu_resume" :label "Resumes" :handler "/resume" :permissions "resume-view")
+ (:id "a_menu_resume" :label "Resumes" :handler "/resume/resume" :permissions "resume-view")
(:id "a_menu_resume_contactinfo" :label "Contact Info" :handler "/resume/contactinfo" :permissions "resume-view")
(:id "a_menu_resume_education" :label "Education" :handler "/resume/education" :permissions "resume-view")
(:id "a_menu_resume_language" :label "Language" :handler "/resume/language" :permissions "resume-view")
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]))
diff --git a/lisp/webapps/resume/site.lisp b/lisp/webapps/resume/site.lisp
index 1a1c7a7..bc2d3b0 100644
--- a/lisp/webapps/resume/site.lisp
+++ b/lisp/webapps/resume/site.lisp
@@ -165,10 +165,10 @@
(define-endpoint ("/users/modify/submit" :method :post) (&post (id :parameter-type 'integer) (role_groups :parameter-type 'string) (username :parameter-type 'string) (first_name :parameter-type 'string) (last_name :parameter-type 'string) (email :parameter-type 'string) (phone :parameter-type 'string)) .users-modify-submit)
(define-endpoint ("/users/toggle-active" :method :post) (&post (id :parameter-type 'integer)) .users-toggle-active)
(define-endpoint ("/users/delete/:id" :method :delete) (&path (id 'integer)) .users-delete)
-(define-endpoint ("/resume" :method :get) () .resume)
-(define-endpoint ("/resume/view" :method :get) () .resume-view)
-(define-endpoint ("/resume/add" :method :post) () .resume-add)
-(define-endpoint ("/resume/add/submit" :method :post) (&post (name :parameter-type 'string)) .resume-add-submit)
-(define-endpoint ("/resume/modify" :method :post) (&post (id :parameter-type 'integer)) .resume-modify)
-(define-endpoint ("/resume/modify/submit" :method :post) (&post (id :parameter-type 'integer) (name :parameter-type 'string)) .resume-modify-submit)
-(define-endpoint ("/resume/delete/:id" :method :delete) (&path (id 'integer)) .resume-delete)
+(define-endpoint ("/resume/resume" :method :get) () .resume)
+(define-endpoint ("/resume/resume/view" :method :get) () .resume-view)
+(define-endpoint ("/resume/resume/add" :method :post) () .resume-add)
+(define-endpoint ("/resume/resume/add/submit" :method :post) (&post (name :parameter-type 'string)) .resume-add-submit)
+(define-endpoint ("/resume/resume/modify" :method :post) (&post (id :parameter-type 'integer)) .resume-modify)
+(define-endpoint ("/resume/resume/modify/submit" :method :post) (&post (id :parameter-type 'integer) (name :parameter-type 'string)) .resume-modify-submit)
+(define-endpoint ("/resume/resume/delete/:id" :method :delete) (&path (id 'integer)) .resume-delete)