From 0ed1cba1b39daaf8eef693233f081b455c88dece Mon Sep 17 00:00:00 2001 From: ckonstanski Date: Mon, 21 Dec 2020 08:59:56 -0700 Subject: stuff --- .../ldapadmin/clojurescript/ldapadmin/.gitignore | 1 + .../clojurescript/ldapadmin/src/core.cljs | 282 ++++++++++++++------- 2 files changed, 193 insertions(+), 90 deletions(-) (limited to 'webapps/ldapadmin/clojurescript') diff --git a/webapps/ldapadmin/clojurescript/ldapadmin/.gitignore b/webapps/ldapadmin/clojurescript/ldapadmin/.gitignore index c754477..a1cd79c 100644 --- a/webapps/ldapadmin/clojurescript/ldapadmin/.gitignore +++ b/webapps/ldapadmin/clojurescript/ldapadmin/.gitignore @@ -12,3 +12,4 @@ pom.xml.asc .hg profiles.clj figwheel_server.log +.rebel_readline_history diff --git a/webapps/ldapadmin/clojurescript/ldapadmin/src/core.cljs b/webapps/ldapadmin/clojurescript/ldapadmin/src/core.cljs index 268da39..e7ef977 100644 --- a/webapps/ldapadmin/clojurescript/ldapadmin/src/core.cljs +++ b/webapps/ldapadmin/clojurescript/ldapadmin/src/core.cljs @@ -4,7 +4,6 @@ [dommy.core :as dommy] [hiccups.runtime :as hiccupsrt])) -;; ========================================================================== ;; ;; declarations (enable-console-print!) @@ -21,8 +20,10 @@ (declare template-home) (declare handler-home) (declare render-home) +(declare template-login) (declare handler-login) (declare render-login) +(declare on-login-submit-clicked) (declare handler-login-authenticate) (declare render-login-authenticate) (declare handler-logout) @@ -31,15 +32,17 @@ (declare handler-inetorg-view) (declare render-inetorg-view) (declare on-inetorg-view-search-clicked) +(declare template-inetorg-view-search) (declare handler-inetorg-view-search) (declare render-inetorg-view-search) -(declare on-inetorg-modify-clicked) (declare template-inetorg-view-results) (declare handler-inetorg-view-results) (declare render-inetorg-view-results) +(declare on-inetorg-modify-clicked) +(declare template-inetorg-modify) (declare handler-inetorg-modify) (declare render-inetorg-modify) -(declare template-inetorg-modify-submit) +(declare on-inetorg-modify-submit-clicked) (declare handler-inetorg-modify-submit) (declare render-inetorg-modify-submit) (declare on-inetorg-delete-clicked) @@ -47,20 +50,20 @@ (declare handler-inetorg-delete) (declare render-inetorg-delete) (declare on-inetorg-delete-submit-clicked) -(declare template-inetorg-delete-submit) (declare handler-inetorg-delete-submit) (declare render-inetorg-delete-submit) +(declare template-inetorg-add) (declare handler-inetorg-add) (declare render-inetorg-add) (declare on-inetorg-add-submit-clicked) (declare handler-inetorg-add-submit) (declare render-inetorg-add-submit) -(declare template-location) (declare on-menu-clicked) (declare handler-location) (declare goto-location) -;; ========================================================================== ;; +(def jquery (js* "$")) + ;; notifications (hiccups/defhtml template-error [errormsg] @@ -70,68 +73,145 @@ [:div {:class "alert alert-success"} message]) (defn maybe-error [jsonobj] - (cond (get jsonobj "errormsg") - (dommy/set-html! (dommy/sel1 :#errormsg) - (template-error (get jsonobj "errormsg"))) - :else - (dommy/set-html! (dommy/sel1 :#errormsg) ""))) + (let [errormsg (get jsonobj "errormsg")] + (cond (or (= nil errormsg) (= "" errormsg)) + (dommy/set-style! (dommy/sel1 :#errormsg) :display "none") + :else + (do + (dommy/set-style! (dommy/sel1 :#errormsg) :display "block") + (dommy/set-html! (dommy/sel1 :#errormsg) + (template-error errormsg)))))) (defn maybe-message [jsonobj] - (cond (get jsonobj "message") - (dommy/set-html! (dommy/sel1 :#message) - (template-message (get jsonobj "message"))) - :else - (dommy/set-html! (dommy/sel1 :#message) ""))) + (let [message (get jsonobj "message")] + (cond (or (= nil message) (= "" message)) + (dommy/set-style! (dommy/sel1 :#message) :display "none") + :else + (do + (dommy/set-style! (dommy/sel1 :#message) :display "block") + (dommy/set-html! (dommy/sel1 :#message) + (template-message message)))))) (defn notifications [jsonobj] (maybe-error jsonobj) (maybe-message jsonobj)) (defn auth-notifications [jsonobj] - (when (get jsonobj "errormsg") - (render-home) - (render-menu))) + (cond (get jsonobj "errormsg") + (do + (render-home "" (get jsonobj "errormsg")) + (render-menu)) + :else + (maybe-message jsonobj))) -;; ========================================================================== ;; ;; forms (hiccups/defhtml template-generic-form - ([jsonobj] - (template-generic-form jsonobj "on_menu_clicked")) - ([jsonobj onclick] + [:div {:id "form-errormsg"}] [:form {:name (get jsonobj "name") :id (get jsonobj "name") - :class "form-horizontal" - :method (get jsonobj "httpMethod")} + :method (get jsonobj "httpMethod") + :action (when (get jsonobj "action") + (str "javascript:" (namespace ::x) "." (get jsonobj "action")))} (for [form-field (get jsonobj "formFields")] (cond (= (get form-field "fieldType") "button") - [:div {:class "col-sm-offset-2 col-sm-10"} - [:button {:name (get form-field "name") + [:div {:class "form-group row"} + [:div {:class "offset-sm-2 col-sm-10"} + [:button {:class "btn btn-primary" + :data-dismiss (get jsonobj "dismiss") + :type (cond (get form-field "onclick") "button" :else "submit") + :onclick (when (get form-field "onclick") + (str (namespace ::x) "." (get form-field "onclick")))} + (get form-field "label")]]] + (= (get form-field "fieldType") "hidden") + [:input {:name (get form-field "name") + :id (get form-field "name") + :value (get form-field "value") + :type (get form-field "fieldType")}] + (= (get form-field "fieldType") "checkbox") + [:div {:class "form-check"} + [:input {:type "checkbox" + :class "form-check-input" + :id (get form-field "name") + :value (get form-field "value") + :checked (get form-field "checked") + :required (get form-field "required")}] + (when (get form-field "label") + [:label {:class "form-check-label" + :for (get form-field "name")} + (get form-field "label")])] + (= (get form-field "fieldType") "select") + [:div {:class "form-group"} + [:label {:for (get form-field "name")} + (get form-field "label")] + [:select {:class "form-control" + :name (get form-field "name") + :id (get form-field "name") + :required (get form-field "required") + :onchange (when (get form-field "onchange") + (str (namespace ::x) "." (get form-field "onchange")))} + (for [option (get form-field "options")] + [:option {:value (get option "value") + :selected (when (= (get option "value") (get form-field "value")) + "selected")} + (get option "label")])]] + (= (get form-field "fieldType") "textarea") + [:div {:class "form-group row"} + (when (get form-field "label") + [:label {:for (get form-field "name") + :class "col-form-label col-sm-2" + :style "text-align: right"} + (get form-field "label")]) + [:div {:class "col-sm-10"} + [:textarea {:name (get form-field "name") + :id (get form-field "name") + :rows "10" + :cols "68"} + (get form-field "value")]]] + (= (get form-field "fieldType") "datetime-local") + [:div {:class "form-group row"} + (when (get form-field "label") + [:label {:for (get form-field "name") + :class "col-form-label col-sm-2" + :style "text-align: right"} + (get form-field "label")]) + [:div {:class "col-sm-10"} + [:input {:name (get form-field "name") :id (get form-field "name") + :value (get form-field "value") :type (get form-field "fieldType") - :class "btn btn-primary" - :data-dismiss "modal" - :onclick (str (namespace ::x) "." onclick "('" (get jsonobj "action") "')")} - (get form-field "label")]] + :class "form-control" + :required (get form-field "required") + :min "2018-01-01T00:00" + :max "2020:12-31T23:59"}]]] :else - [:div {:class "form-group"} - [:label {:for (get form-field "name") - :class "control-label col-sm-2"} - (get form-field "label")] + [:div {:class "form-group row"} + (when (get form-field "label") + [:label {:for (get form-field "name") + :class "col-form-label col-sm-2" + :style "text-align: right"} + (get form-field "label")]) [:div {:class "col-sm-10"} [:input {:name (get form-field "name") :id (get form-field "name") + :value (get form-field "value") :type (get form-field "fieldType") - :class "form-control"}]]]))])) + :class "form-control" + :required (get form-field "required")}]]]))] + (when (get jsonobj "requiredP") + [:div "* Required"])) -;; ========================================================================== ;; ;; menu (hiccups/defhtml template-menu [menuitems] - [:div {:class "row"} + [:ul {:class "nav nav-pills"} (for [menuitem menuitems] - [:div {:class "col-lg-3"} - [:a {:class "menuitem" + [:li {:class "nav-item"} + [:a {:class (cond (= (clojure.string/upper-case (get menuitem "handler")) + (clojure.string/upper-case (dommy/html (dommy/sel1 :#location)))) + "nav-link active" + :else + "nav-link") :id (get menuitem "id") :onclick (str (namespace ::x) ".on_menu_clicked('" (get menuitem "handler") "')")} (get menuitem "label")]])]) @@ -143,70 +223,86 @@ (defn render-menu [] (GET "/menu" {:handler handler-menu})) -;; ========================================================================== ;; ;; home (hiccups/defhtml template-home [jsonobj] - [:h3 {:align "center"} (get jsonobj "content")]) + [:h3 {:style "text-align: center"} (get jsonobj "content")]) (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})) + ([] + (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] + [:h3 {:style "text-align: center"} (get jsonobj "title")] + (template-generic-form (get jsonobj "form")) + [:div {:style "text-align: center"}]) + (defn handler-login [response] (let [jsonobj (js->clj (js/JSON.parse response))] (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-generic-form jsonobj)))) + (dommy/set-html! (dommy/sel1 :#body) (template-login jsonobj)))) (defn render-login [] (GET "/login" {:handler handler-login})) -;; ========================================================================== ;; ;; login-authenticate +(defn on-login-submit-clicked [] + (when (-> (jquery "#login-form") + (.get "0") + (.checkValidity)) + (render-login-authenticate))) + (defn handler-login-authenticate [response] (let [jsonobj (js->clj (js/JSON.parse response))] (cond (get jsonobj "errormsg") - (render-login) + (do + (notifications jsonobj) + (render-login)) (get jsonobj "message") - (render-home)) - (render-menu) - (notifications jsonobj))) + (do + (dommy/set-html! (dommy/sel1 :#location) "/home") + (render-home (get jsonobj "message") ""))) + (render-menu))) (defn render-login-authenticate [] (POST "/login/authenticate" {:format :raw - :params {:dn (dommy/value (dommy/sel1 :#dn)) - :password (dommy/value (dommy/sel1 :#password))} + :params {:username (dommy/value (dommy/sel1 :#username)) + :pwd (dommy/value (dommy/sel1 :#pwd))} :handler handler-login-authenticate})) -;; ========================================================================== ;; ;; logout (defn handler-logout [response] (let [jsonobj (js->clj (js/JSON.parse response))] - (render-home) - (render-menu) - (notifications jsonobj))) + (render-home"You are now logged out" "") + (dommy/set-html! (dommy/sel1 :#location) "/home") + (render-menu))) (defn render-logout [] (GET "/logout" {:handler handler-logout})) -;; ========================================================================== ;; ;; inetorg-view (hiccups/defhtml template-inetorg-view [jsonobj] - [:h3 {:align "center"} (get jsonobj "instructions")] + [:h3 {:style "text-align: center"} (get jsonobj "instructions")] [:div {:id "search"}] [:div {:id "results"}] [:div {:id "modify" :class "modal fade" - :role "dialog"} + :role "dialog"} [:div {:class "modal-dialog modal-lg"} [:div {:class "modal-content"} [:div {:class "modal-header"} @@ -253,22 +349,26 @@ (defn render-inetorg-view [] (GET "/inetorg/view" {:handler handler-inetorg-view})) -;; ========================================================================== ;; ;; inetorg-view-search -(defn on-inetorg-view-search-clicked [handler] - (render-inetorg-view-results)) +(defn on-inetorg-view-search-clicked [] + (when (-> (jquery "#inetorg-view-search-form") + (.get "0") + (.checkValidity)) + (render-inetorg-view-results))) + +(hiccups/defhtml template-inetorg-view-search [jsonobj] + (template-generic-form (get jsonobj "form"))) (defn handler-inetorg-view-search [response] (let [jsonobj (js->clj (js/JSON.parse response))] (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#search) (template-generic-form jsonobj "on_inetorg_view_search_clicked")) + (dommy/set-html! (dommy/sel1 :#search) (template-inetorg-view-search jsonobj)) (render-inetorg-view-results))) (defn render-inetorg-view-search [] (GET "/inetorg/view/search" {:handler handler-inetorg-view-search})) -;; ========================================================================== ;; ;; inetorg-view-results (hiccups/defhtml template-inetorg-view-results [jsonobj] @@ -323,17 +423,22 @@ :businesscategory (dommy/value (dommy/sel1 :#view-businesscategory))} :handler handler-inetorg-view-results})) -;; ========================================================================== ;; ;; inetorg-modify (defn on-inetorg-modify-clicked [cn] - (render-inetorg-modify cn)) + (when (-> (jquery "#inetorg-modify-form") + (.get "0") + (.checkValidity)) + (render-inetorg-modify cn)) + +(hiccups/defhtml template-inetorg-modify [jsonobj] + (template-generic-form (get jsonobj "form"))) (defn handler-inetorg-modify [response] (let [jsonobj (js->clj (js/JSON.parse response)) jquery (js* "$")] (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#modify-body) (template-generic-form jsonobj "on_inetorg_modify_submit_clicked")) + (dommy/set-html! (dommy/sel1 :#modify-body) (template-inetrog-modify jsonobj)) (doseq [[name value] (get jsonobj "ldapUserValues")] (dommy/set-value! (dommy/sel1 (keyword (str "#modify-" name))) value)) (.modal (jquery "#modify")))) @@ -343,7 +448,6 @@ :params {:cn cn} :handler handler-inetorg-modify})) -;; ========================================================================== ;; ;; inetorg-modify-submit (defn on-inetorg-modify-submit-clicked [] @@ -369,7 +473,6 @@ :businesscategory (dommy/value (dommy/sel1 :#modify-businesscategory))} :handler handler-inetorg-modify-submit})) -;; ========================================================================== ;; ;; inetrog-delete (defn on-inetorg-delete-clicked [cn] @@ -395,7 +498,6 @@ :params {:cn cn} :handler handler-inetorg-delete})) -;; ========================================================================== ;; ;; inetrog-delete-submit (defn on-inetorg-delete-submit-clicked [cn] @@ -412,22 +514,26 @@ :params {:cn cn} :handler handler-inetorg-delete-submit})) -;; ========================================================================== ;; ;; inetrog-add +(hiccups/defhtml template-inetorg-add [jsonobj] + (template-generic-form (get jsonobj "form"))) + (defn handler-inetorg-add [response] (let [jsonobj (js->clj (js/JSON.parse response))] (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-generic-form jsonobj "on_inetorg_add_submit_clicked")))) + (dommy/set-html! (dommy/sel1 :#body) (template-inetorg-add jsonobj)))) (defn render-inetorg-add [] (GET "/inetorg/add" {:handler handler-inetorg-add})) -;; ========================================================================== ;; ;; inetorg-add-submit -(defn on-inetorg-add-submit-clicked [handler] - (render-inetorg-add-submit)) +(defn on-inetorg-add-submit-clicked [] + (when (-> (jquery "#inetorg-add-form") + (.get "0") + (.checkValidity)) + (render-inetorg-add-submit))) (defn handler-inetorg-add-submit [response] (let [jsonobj (js->clj (js/JSON.parse response))] @@ -449,28 +555,24 @@ :businesscategory (dommy/value (dommy/sel1 :#add-businesscategory))} :handler handler-inetorg-add-submit})) -;; ========================================================================== ;; ;; location -(hiccups/defhtml template-location [location] - [:h3 {:align "center"} location]) - (defn on-menu-clicked [handler] - (dommy/set-html! (dommy/sel1 :#location) (clojure.string/upper-case (template-location handler))) - (cond (= handler "/home") (render-home) - (= handler "/login") (render-login) - (= handler "/login/authenticate") (render-login-authenticate) - (= handler "/logout") (render-logout) - (= handler "/inetorg/view") (render-inetorg-view) - (= handler "/inetorg/add") (render-inetorg-add))) + (dommy/set-html! (dommy/sel1 :#location) handler) + (render-menu) + (cond (= handler "/home") (render-home) + (= handler "/login") (render-login) + (= handler "/login/authenticate") (render-login-authenticate) + (= handler "/logout") (render-logout) + (= handler "/inetorg/view") (render-inetorg-view) + (= handler "/inetorg/add") (render-inetorg-add))) (defn handler-location [response] (let [jsonobj (js->clj (js/JSON.parse response))] (on-menu-clicked (get jsonobj "location")) - (render-menu) (notifications jsonobj))) (defn goto-location [] - (GET "/location" {:handler handler-location})) - -(set! (.-onload js/window) goto-location) + (POST "/location" {:format :raw + :params {:location location} + :handler handler-location})) -- cgit v1.3