From 51aa4409c58625687445f3d176e3f6bfa5281153 Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Tue, 21 Jul 2026 17:54:15 -0600 Subject: added languages --- .../resume/clojurescript/resume/src/core.cljs | 209 ++++++++++++++++++++- lisp/webapps/resume/site.lisp | 28 +++ 2 files changed, 236 insertions(+), 1 deletion(-) (limited to 'lisp/webapps/resume') diff --git a/lisp/webapps/resume/clojurescript/resume/src/core.cljs b/lisp/webapps/resume/clojurescript/resume/src/core.cljs index d894e7f..532a52b 100644 --- a/lisp/webapps/resume/clojurescript/resume/src/core.cljs +++ b/lisp/webapps/resume/clojurescript/resume/src/core.cljs @@ -195,6 +195,29 @@ (declare on-education-delete-clicked) (declare handler-education-delete) (declare render-education-delete) +(declare template-language) +(declare handler-language) +(declare render-language) +(declare template-language-view) +(declare handler-language-view) +(declare render-language-view) +(declare on-language-add-clicked) +(declare template-language-add) +(declare handler-language-add) +(declare render-language-add) +(declare on-language-add-submit-clicked) +(declare handler-language-add-submit) +(declare render-language-add-submit) +(declare on-language-modify-clicked) +(declare template-language-modify) +(declare handler-language-modify) +(declare render-language-modify) +(declare on-language-modify-submit-clicked) +(declare handler-language-modify-submit) +(declare render-language-modify-submit) +(declare on-language-delete-clicked) +(declare handler-language-delete) +(declare render-language-delete) (declare on-menu-clicked) (declare handler-location) (declare goto-location) @@ -1606,6 +1629,189 @@ {:format :raw :handler handler-education-delete})) +;; language + +(hiccups/defhtml template-language [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-language [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (notifications jsonobj) + (dommy/set-html! (dommy/sel1 :#body) (template-language jsonobj)) + (render-language-view))) + +(defn render-language [] + (GET "/resumes/language" {:handler handler-language})) + +;; language-view + +(hiccups/defhtml template-language-view [jsonobj] + [:div {:style "text-align: right"} + [:img {:src "/static/images/add.png" + :style "cursor:pointer; cursor:hand" + :onclick (str (namespace ::x) ".on_language_add_clicked()")}]] + [:table {:class "table table-striped table-hover table-sm"} + [:thead + [:tr + [:th {:scope "col"} "Name"] + [:th {:scope "col"} "Understanding Listening"] + [:th {:scope "col"} "Understanding Reading"] + [:th {:scope "col"} "Speaking Interaction"] + [:th {:scope "col"} "Speaking Production"] + [:th {:scope "col"} "Writing"] + [:th {:scope "col"} "Mod"] + [:th {:scope "col"} "Del"]]] + [:tbody + (for [language (get jsonobj "languages")] + [:tr + [:td (get language "name")] + [:td (get language "understanding_listening")] + [:td (get language "understanding_reading")] + [:td (get language "speaking_interaction")] + [:td (get language "speaking_production")] + [:td (get language "writing")] + [:td {:width "30"} + [:img {:src "/static/images/modify.png" + :onclick (str (namespace ::x) ".on_language_modify_clicked(" (get language "id") ")")}]] + [:td {:width "30"} + [:img {:src "/static/images/delete.png" + :onclick (str (namespace ::x) ".on_language_delete_clicked(" (get language "id") ", '" (get language "name") "')")}]]])]]) + +(defn handler-language-view [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (dommy/set-html! (dommy/sel1 :#content) (template-language-view jsonobj)))) + +(defn render-language-view [] + (GET "/resumes/language/view" {:handler handler-language-view})) + +;; language-add + +(defn on-language-add-clicked [] + (render-language-add)) + +(hiccups/defhtml template-language-add [jsonobj] + (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) + +(defn handler-language-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-language-add jsonobj)) + (.modal (jquery "#modify")))) + +(defn render-language-add [] + (POST "/resumes/language/add" {:handler handler-language-add})) + +;; language-add-submit + +(defn on-language-add-submit-clicked [] + (when (-> (jquery "#language-add-form") + (.get "0") + (.checkValidity)) + (.modal (jquery "#modify") "hide") + (render-language-add-submit))) + +(defn handler-language-add-submit [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked "/resumes/language"))) + +(defn render-language-add-submit [] + (POST "/resumes/language/add/submit" + {:format :raw + :params {:name (dommy/value (dommy/sel1 :#name)) + :understanding_listening (dommy/value (dommy/sel1 :#understanding_listening)) + :understanding_reading (dommy/value (dommy/sel1 :#understanding_reading)) + :speaking_interaction (dommy/value (dommy/sel1 :#speaking_interaction)) + :speaking_production (dommy/value (dommy/sel1 :#speaking_production)) + :writing (dommy/value (dommy/sel1 :#writing))} + :handler handler-language-add-submit})) + +;; language-modify + +(defn on-language-modify-clicked [id] + (render-language-modify id)) + +(hiccups/defhtml template-language-modify [jsonobj] + (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) + +(defn handler-language-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-language-modify jsonobj)) + (.modal (jquery "#modify")))) + +(defn render-language-modify [id] + (POST "/resumes/language/modify" + {:format :raw + :params {:id id} + :handler handler-language-modify})) + +;; language-modify-submit + +(defn on-language-modify-submit-clicked [] + (when (-> (jquery "#language-modify-form") + (.get "0") + (.checkValidity)) + (.modal (jquery "#modify") "hide") + (render-language-modify-submit))) + +(defn handler-language-modify-submit [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked "/resumes/language"))) + +(defn render-language-modify-submit [] + (POST "/resumes/language/modify/submit" + {:format :raw + :params {:id (dommy/value (dommy/sel1 :#id)) + :name (dommy/value (dommy/sel1 :#name)) + :understanding_listening (dommy/value (dommy/sel1 :#understanding_listening)) + :understanding_reading (dommy/value (dommy/sel1 :#understanding_reading)) + :speaking_interaction (dommy/value (dommy/sel1 :#speaking_interaction)) + :speaking_production (dommy/value (dommy/sel1 :#speaking_production)) + :writing (dommy/value (dommy/sel1 :#writing))} + :handler handler-language-modify-submit})) + +;; language-delete + +(defn on-language-delete-clicked [id name] + (when (js/confirm (str "Are you sure you want to delete " name "? This action cannot be undone.")) + (render-language-delete id))) + +(defn handler-language-delete [response] + (let [jsonobj (js->clj (js/JSON.parse response))] + (auth-notifications jsonobj) + (on-menu-clicked "/resumes/language"))) + +(defn render-language-delete [id] + (DELETE (str "/resumes/language/delete/" id) + {:format :raw + :handler handler-language-delete})) + ;; location (defn on-menu-clicked [handler] @@ -1621,7 +1827,8 @@ (= handler "/users") (render-users) (= handler "/resumes") (render-resumes) (= handler "/resumes/contactinfo") (render-contactinfo) - (= handler "/resumes/education") (render-education))) + (= handler "/resumes/education") (render-education) + (= handler "/resumes/language") (render-language))) (defn handler-location [response] (let [jsonobj (js->clj (js/JSON.parse response))] diff --git a/lisp/webapps/resume/site.lisp b/lisp/webapps/resume/site.lisp index d8c1fb5..584c0b7 100644 --- a/lisp/webapps/resume/site.lisp +++ b/lisp/webapps/resume/site.lisp @@ -194,6 +194,27 @@ (defmacro .education-delete () `(education-delete-json id)) +(defmacro .language () + `(language-json)) + +(defmacro .language-view () + `(language-view-json)) + +(defmacro .language-add () + `(language-add-json)) + +(defmacro .language-add-submit () + `(language-add-submit-json name understanding_listening understanding_reading speaking_interaction speaking_production writing)) + +(defmacro .language-modify () + `(language-modify-json id)) + +(defmacro .language-modify-submit () + `(language-modify-submit-json id name understanding_listening understanding_reading speaking_interaction speaking_production writing)) + +(defmacro .language-delete () + `(language-delete-json id)) + (define-endpoint ("/" :method :get) () .base) (define-endpoint ("/location" :method :post) (&post (location :parameter-type 'string)) .location) (define-endpoint ("/home" :method :get) () .home-get) @@ -252,3 +273,10 @@ (define-endpoint ("/resumes/education/modify" :method :post) (&post (id :parameter-type 'integer)) .education-modify) (define-endpoint ("/resumes/education/modify/submit" :method :post) (&post (id :parameter-type 'integer) (school :parameter-type 'string) (major :parameter-type 'string) (minor :parameter-type 'string) (degree :parameter-type 'string) (progress :parameter-type 'string) (start_date :parameter-type 'string) (end_date :parameter-type 'string)) .education-modify-submit) (define-endpoint ("/resumes/education/delete/:id" :method :delete) (&path (id 'integer)) .education-delete) +(define-endpoint ("/resumes/language" :method :get) () .language) +(define-endpoint ("/resumes/language/view" :method :get) () .language-view) +(define-endpoint ("/resumes/language/add" :method :post) () .language-add) +(define-endpoint ("/resumes/language/add/submit" :method :post) (&post (name :parameter-type 'string) (understanding_listening :parameter-type 'string) (understanding_reading :parameter-type 'string) (speaking_interaction :parameter-type 'string) (speaking_production :parameter-type 'string) (writing :parameter-type 'string)) .language-add-submit) +(define-endpoint ("/resumes/language/modify" :method :post) (&post (id :parameter-type 'integer)) .language-modify) +(define-endpoint ("/resumes/language/modify/submit" :method :post) (&post (id :parameter-type 'integer) (name :parameter-type 'string) (understanding_listening :parameter-type 'string) (understanding_reading :parameter-type 'string) (speaking_interaction :parameter-type 'string) (speaking_production :parameter-type 'string) (writing :parameter-type 'string)) .language-modify-submit) +(define-endpoint ("/resumes/language/delete/:id" :method :delete) (&path (id 'integer)) .language-delete) -- cgit v1.3