diff options
Diffstat (limited to 'lisp/webapps/resume/clojurescript')
| -rw-r--r-- | lisp/webapps/resume/clojurescript/resume/src/core.cljs | 268 |
1 files changed, 209 insertions, 59 deletions
diff --git a/lisp/webapps/resume/clojurescript/resume/src/core.cljs b/lisp/webapps/resume/clojurescript/resume/src/core.cljs index 7010a88..a84c806 100644 --- a/lisp/webapps/resume/clojurescript/resume/src/core.cljs +++ b/lisp/webapps/resume/clojurescript/resume/src/core.cljs @@ -29,8 +29,6 @@ (declare handler-menu) (declare handler-menu-user) (declare render-menu) -(declare comp-home) -(declare handler-home) (declare render-home) (declare template-login) (declare handler-login) @@ -128,6 +126,29 @@ (declare on-users-delete-clicked) (declare handler-users-delete) (declare render-users-delete) +(declare template-resumes) +(declare handler-resumes) +(declare render-resumes) +(declare template-resumes-view) +(declare handler-resumes-view) +(declare render-resumes-view) +(declare on-resumes-add-clicked) +(declare template-resumes-add) +(declare handler-resumes-add) +(declare render-resumes-add) +(declare on-resumes-add-submit-clicked) +(declare handler-resumes-add-submit) +(declare render-resumes-add-submit) +(declare on-resumes-modify-clicked) +(declare template-resumes-modify) +(declare handler-resumes-modify) +(declare render-resumes-modify) +(declare on-resumes-modify-submit-clicked) +(declare handler-resumes-modify-submit) +(declare render-resumes-modify-submit) +(declare on-resumes-delete-clicked) +(declare handler-resumes-delete) +(declare render-resumes-delete) (declare on-menu-clicked) (declare handler-location) (declare goto-location) @@ -137,14 +158,14 @@ (enable-console-print!) -(defonce jquery (js* "$")) -(defonce sql-formatter (time-format/formatter "yyyy-MM-dd HH:mm:ss")) -(defonce pretty-formatter (time-format/formatters :rfc822)) -(defonce location-state (r/atom "/home")) -(defonce about-us-category-state (r/atom nil)) -(defonce menu-main-state (r/atom [])) -(defonce menu-user-state (r/atom [])) -(defonce menu-user-label (r/atom nil)) +(def jquery (js* "$")) +(def sql-formatter (time-format/formatter "yyyy-MM-dd HH:mm:ss")) +(def pretty-formatter (time-format/formatters :rfc822)) +(def location-state (r/atom "/home")) +(def about-us-category-state (r/atom "home")) +(def menu-main-state (r/atom [])) +(def menu-user-state (r/atom [])) +(def menu-user-label (r/atom "Guest User")) ;; helper functions @@ -182,7 +203,7 @@ [:tr [:td {:class "banner-menu"} [comp-menu-user]] - [:td {:class "banner-title"} "Bogen-" [:i "Herr"]] + [:td {:class "banner-title"} "Resume Builder"] [:td {:class "banner-menu"} " "]]]]] [comp-menu-main] [ck-notifications/comp-errormsg] @@ -242,7 +263,7 @@ (defn comp-menu-main [] [:div {:class "well"} [:ul {:class "nav nav-pills"} - (for [menuitem @menu-main-state] + (for [menuitem (doall @menu-main-state)] [:li {:key (str "li_" (get menuitem "id")) :class "nav-item"} [:a {:class (cond (= (str/upper-case (get menuitem "handler")) @@ -264,7 +285,7 @@ :aria-expanded "false"} @menu-user-label] [:div {:class "dropdown-menu" :aria-labelledby "button-menu-user"} - (for [menuitem @menu-user-state] + (for [menuitem (doall @menu-user-state)] [:a {:key (get menuitem "id") :class "dropdown-item" :on-click #(on-menu-clicked (get menuitem "handler"))} @@ -283,33 +304,6 @@ (GET "/menu" {:handler handler-menu}) (GET "/menu/user" {:handler handler-menu-user})) -;; home - -(hiccups/defhtml template-home [jsonobj] - [:div - [:h2 {:style "text-align: center"} "Welcome To Carlos Konstanski's Music Studio"] - [:h3 {:style "text-align: center"} - [:i "a.k.a. der Bogenherr" [:br] "a.k.a. Dr. Divertimento"]] - [:h2 {:style "text-align: center"} "Study the Violin, Viola and Viola d'Amore With Me!"] - [:div {:style "text-align: center"} - [:img {:style "width: 100%" - :src "/static/images/instrument-cabinet.jpg"}]]]) - -(defn handler-home [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-home jsonobj)))) - -(defn render-home - ([] - (GET "/home" {:handler handler-home})) - ([message errormsg] - (POST "/home" - {:format :raw - :params {:message message - :errormsg errormsg} - :handler handler-home}))) - ;; login (hiccups/defhtml template-login [jsonobj] @@ -506,13 +500,11 @@ :pwd2 (dommy/value (dommy/sel1 :#pwd2))} :handler handler-password-submit})) -;; about-us (lessons, gigs, programming) +;; about-us (home) (hiccups/defhtml template-about-us [jsonobj] [:h1 {:style "text-align: center"} - (cond (= @about-us-category-state "lessons") "About the Studio" - (= @about-us-category-state "gigs") "Hire Me to Play" - (= @about-us-category-state "programming") "Hire Me to Write Software")] + (cond (= @about-us-category-state "home") "Home")] [:div {:id "content"}] [:div {:id "modify" :class "modal fade" @@ -543,14 +535,15 @@ (dommy/set-html! (dommy/sel1 :#body) (template-about-us jsonobj)) (render-about-us-view))) -(defn render-lessons [] - (GET "/lessons" {:handler handler-about-us})) - -(defn render-gigs [] - (GET "/gigs" {:handler handler-about-us})) - -(defn render-programming [] - (GET "/programming" {:handler handler-about-us})) +(defn render-home + ([] + (GET "/home" {:handler handler-about-us})) + ([message errormsg] + (POST "/home" + {:format :raw + :params {:message message + :errormsg errormsg} + :handler handler-about-us}))) ;; about-us-view @@ -583,9 +576,7 @@ (let [jsonobj (js->clj (js/JSON.parse response))] (auth-notifications jsonobj) (dommy/set-html! (dommy/sel1 :#modify-title) - (str (cond (= @about-us-category-state "lessons") "About the Studio" - (= @about-us-category-state "gigs") "For Hire" - (= @about-us-category-state "programming") "Software Consulting") + (str (cond (= @about-us-category-state "home") "Home") " - Modify")) (dommy/set-html! (dommy/sel1 :#modify-body) (template-about-us-modify jsonobj)) (.modal (jquery "#modify")))) @@ -1036,6 +1027,167 @@ {:format :raw :handler handler-users-delete})) +;; resumes + +(hiccups/defhtml template-resumes [jsonobj] + [:h3 {:style "text-align: center"} (get jsonobj "title")] + [:div {:id "content"}] + [:div {:id "modify" + :class "modal fade" + :role "dialog" + :tabindex "-1"} + [:div {:class "modal-dialog modal-lg"} + [:div {:class "modal-content"} + [:div {:class "modal-header"} + [:h5 [:span {:id "modify-title"}]] + [:button {:type "button" + :class "close" + :data-dismiss "modal"} + "×"]] + [:div {:id "modify-body" + :class "modal-body" + :style "height: 450px;"}] + [:div {:class "modal-footer"} + [:button {:type "submit" + :class "btn btn-danger btn-default" + :data-dismiss "modal"} + [:span {:class "glyphicon glyphicon-remove"}] + "Cancel"]]]]]) + +(defn handler-resumes [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (notifications jsonobj) + (dommy/set-html! (dommy/sel1 :#body) (template-resumes jsonobj)) + (render-resumes-view))) + +(defn render-resumes [] + (GET "/resumes" {:handler handler-resumes})) + +;; resumes-view + +(hiccups/defhtml template-resumes-view [jsonobj] + [:div {:style "text-align: right"} + [:img {:src "/static/images/add.png" + :style "cursor:pointer; cursor:hand" + :onclick (str (namespace ::x) ".on_resumes_add_clicked()")}]] + [:table {:class "table table-striped table-hover table-sm"} + [:thead + [:tr + [:th {:scope "col"} "Name"] + [:th {:scope "col"} "Del"]]] + [:tbody + (for [resume (get jsonobj "resumes")] + (let [onclick (str (namespace ::x) ".on_resumes_modify_clicked(" (get resume "id") ")") + toggle-active (str (namespace ::x) ".on_resumes_toggle_active_clicked(" (get resume "id") ")")] + [:tr + [:td {:onclick onclick} (get resume "name")] + [:td {:width "50"} + [:img {:src "/static/images/delete.png" + :onclick (str (namespace ::x) ".on_resumes_delete_clicked(" (get resume "id") ", '" (get resume "name") "')")}]]]))]]) + +(defn handler-resumes-view [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (dommy/set-html! (dommy/sel1 :#content) (template-resumes-view jsonobj)))) + +(defn render-resumes-view [] + (GET "/resumes/view" {:handler handler-resumes-view})) + +;; resumes-add + +(defn on-resumes-add-clicked [] + (render-resumes-add)) + +(hiccups/defhtml template-resumes-add [jsonobj] + (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) + +(defn handler-resumes-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) (template-resumes-add jsonobj)) + (.modal (jquery "#modify")))) + +(defn render-resumes-add [] + (POST "/resumes/add" {:handler handler-resumes-add})) + +;; resumes-add-submit + +(defn on-resumes-add-submit-clicked [] + (when (-> (jquery "#resumes-add-form") + (.get "0") + (.checkValidity)) + (.modal (jquery "#modify") "hide") + (render-resumes-add-submit))) + +(defn handler-resumes-add-submit [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked "/resumes"))) + +(defn render-resumes-add-submit [] + (POST "/resumes/add/submit" + {:format :raw + :params {:name (dommy/value (dommy/sel1 :#name))} + :handler handler-resumes-add-submit})) + +;; resumes-modify + +(defn on-resumes-modify-clicked [id] + (render-resumes-modify id)) + +(hiccups/defhtml template-resumes-modify [jsonobj] + (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) + +(defn handler-resumes-modify [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) (template-resumes-modify jsonobj)) + (.modal (jquery "#modify")))) + +(defn render-resumes-modify [id] + (POST "/resumes/modify" + {:format :raw + :params {:id id} + :handler handler-resumes-modify})) + +;; resumes-modify-submit + +(defn on-resumes-modify-submit-clicked [] + (when (-> (jquery "#resumes-modify-form") + (.get "0") + (.checkValidity)) + (.modal (jquery "#modify") "hide") + (render-resumes-modify-submit))) + +(defn handler-resumes-modify-submit [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked "/resumes"))) + +(defn render-resumes-modify-submit [] + (POST "/resumes/modify/submit" + {:format :raw + :params {:id (dommy/value (dommy/sel1 :#id)) + :name (dommy/value (dommy/sel1 :#name))} + :handler handler-resumes-modify-submit})) + +;; resumes-delete + +(defn on-resumes-delete-clicked [id name] + (when (js/confirm (str "Are you sure you want to delete " name "? This action cannot be undone.")) + (render-resumes-delete id))) + +(defn handler-resumes-delete [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked "/resumes"))) + +(defn render-resumes-delete [id] + (DELETE (str "/resumes/delete/" id) + {:format :raw + :handler handler-resumes-delete})) + ;; location (defn on-menu-clicked [handler] @@ -1046,12 +1198,10 @@ (= handler "/logout") (render-logout) (= handler "/profile") (render-profile) (= handler "/password") (render-password) - (= handler "/lessons") (render-lessons) - (= handler "/gigs") (render-gigs) - (= handler "/programming") (render-programming) (= handler "/contact-us") (render-contact-us) (= handler "/messages") (render-messages) - (= handler "/users") (render-users))) + (= handler "/users") (render-users) + (= handler "/resumes") (render-resumes))) (defn handler-location [response] (let [jsonobj (js->clj (js/JSON.parse response))] |
