diff options
Diffstat (limited to 'lisp/webapps/woodriverlessons/clojurescript')
4 files changed, 0 insertions, 1353 deletions
diff --git a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/.gitignore b/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/.gitignore deleted file mode 100644 index 864ae75..0000000 --- a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/.gitignore +++ /dev/null @@ -1,16 +0,0 @@ -target -classes -resources -checkouts -pom.xml -pom.xml.asc -*.jar -*.class -.lein-* -.nrepl-port -.rebel_readline_history -.hgignore -.hg -profiles.clj -figwheel_server.log -.rebel_readline_history diff --git a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/README.md b/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/README.md deleted file mode 100644 index 53ca866..0000000 --- a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# ldapadmin - -A Clojure library designed to ... well, that part is up to you. - -## Usage - -FIXME - -## License - -Copyright © 2017 FIXME - -Distributed under the Eclipse Public License either version 1.0 or (at -your option) any later version. diff --git a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/project.clj b/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/project.clj deleted file mode 100644 index 9b93c1e..0000000 --- a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/project.clj +++ /dev/null @@ -1,13 +0,0 @@ -(defproject woodriverlessons "0.1.0-SNAPSHOT" - :description "FIXME" - :url "FIXME" - :license "public domain" - :dependencies [[org.clojure/clojure "LATEST"] - [org.clojure/clojurescript "LATEST"] - [cljs-ajax "LATEST"] - [prismatic/dommy "LATEST"] - [hiccups "LATEST"] - [cljsjs/showdown "LATEST"] - [com.andrewmcveigh/cljs-time "LATEST"]] - :plugins [[lein-cljsbuild "LATEST"]] - :clean-targets ^{:protect false} [:target-path "out" "resources/public/cljs"]) diff --git a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/src/core.cljs b/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/src/core.cljs deleted file mode 100644 index e1b26bb..0000000 --- a/lisp/webapps/woodriverlessons/clojurescript/woodriverlessons/src/core.cljs +++ /dev/null @@ -1,1310 +0,0 @@ -(ns woodriverlessons.core - (:require-macros [hiccups.core :as hiccups :refer [html]]) - (:require [ajax.core :refer [GET POST raw-response-format]] - [dommy.core :as dommy] - [hiccups.runtime :as hiccupsrt] - [cljsjs.showdown :as showdown] - [clojure.string :as str] - [cljs-time.format :as time-format] - [org-ckons-cljs.notifications.core :as ck-notifications] - [org-ckons-cljs.form.core :as ck-form])) - -;; declarations - -(enable-console-print!) -(def jquery (js* "$")) -(def sql-formatter (time-format/formatter "yyyy-MM-dd HH:mm:ss")) -(def pretty-formatter (time-format/formatters :rfc822)) - -(declare date-sql-to-pretty) -(declare markdown-to-html) -(declare reduce-checkboxes) -(declare notifications) -(declare auth-notifications) -(declare template-menu) -(declare template-menu-user) -(declare handler-menu) -(declare handler-menu-user) -(declare render-menu) -(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) -(declare render-logout) -(declare template-profile) -(declare handler-profile) -(declare render-profile) -(declare template-profile-view) -(declare handler-profile-view) -(declare render-profile-view) -(declare on-profile-modify-clicked) -(declare template-profile-modify) -(declare handler-profile-modify) -(declare render-profile-modify) -(declare on-profile-modify-submit-clicked) -(declare handler-profile-modify-submit) -(declare render-profile-modify-submit) -(declare template-password) -(declare handler-password) -(declare render-password) -(declare on-password-submit-clicked) -(declare handler-password-submit) -(declare render-password-submit) -(declare template-about-us) -(declare handler-about-us) -(declare render-about-us) -(declare template-about-us-view) -(declare handler-about-us-view) -(declare render-about-us-view) -(declare on-about-us-modify-clicked) -(declare template-about-us-modify) -(declare handler-about-us-modify) -(declare render-about-us-modify) -(declare on-about-us-modify-submit-clicked) -(declare handler-about-us-modify-submit) -(declare render-about-us-modify-submit) -(declare render-gallery) -(declare template-gallery-view) -(declare template-gallery-image-fullscreen) -(declare on-gallery-image-clicked ) -(declare handler-gallery-view) -(declare render-gallery-view) -(declare on-gallery-add-clicked) -(declare template-gallery-add) -(declare handler-gallery-add) -(declare render-gallery-add) -(declare on-gallery-add-submit-clicked) -(declare handler-gallery-add-submit) -(declare render-gallery-add-submit) -(declare on-gallery-modify-clicked) -(declare template-gallery-modify) -(declare handler-gallery-modify) -(declare render-gallery-modify) -(declare on-gallery-modify-submit-clicked) -(declare handler-gallery-modify-submit) -(declare render-gallery-modify-submit) -(declare on-gallery-delete-clicked) -(declare handler-gallery-delete) -(declare render-gallery-delete) -(declare template-testimonials) -(declare handler-testimonials) -(declare render-testimonials) -(declare template-testimonials-view) -(declare handler-testimonials-view) -(declare render-testimonials-view) -(declare on-testimonials-modify-clicked) -(declare template-testimonials-modify) -(declare handler-testimonials-modify) -(declare render-testimonials-modify) -(declare on-testimonials-modify-submit-clicked) -(declare handler-testimonials-modify-submit) -(declare render-testimonials-modify-submit) -(declare template-contact-us) -(declare handler-contact-us) -(declare render-contact-us) -(declare template-contact-us-view) -(declare handler-contact-us-view) -(declare render-contact-us-view) -(declare on-contact-us-email-submit-clicked) -(declare handler-contact-us-email-submit) -(declare render-contact-us-email-submit) -(declare template-messages) -(declare handler-messages) -(declare render-messages) -(declare on-messages-mode-clicked) -(declare template-messages-results) -(declare handler-messages-results) -(declare render-messages-results) -(declare on-messages-mark) -(declare handler-messages-mark) -(declare render-messages-mark) -(declare template-users) -(declare handler-users) -(declare render-users) -(declare template-users-view) -(declare handler-users-view) -(declare render-users-view) -(declare on-users-add-clicked) -(declare template-users-add) -(declare handler-users-add) -(declare render-users-add) -(declare on-users-add-submit-clicked) -(declare handler-users-add-submit) -(declare render-users-add-submit) -(declare template-users-register) -(declare handler-users-register) -(declare render-users-register) -(declare template-users-register-form) -(declare handler-users-register-form) -(declare handler-users-register-form-impl) -(declare render-users-register-form) -(declare on-users-register-submit-clicked) -(declare template-users-register-submit) -(declare handler-users-register-submit) -(declare render-users-register-submit) -(declare on-users-modify-clicked) -(declare template-users-modify) -(declare handler-users-modify) -(declare render-users-modify) -(declare on-users-modify-submit-clicked) -(declare handler-users-modify-submit) -(declare render-users-modify-submit) -(declare on-users-toggle-active-clicked) -(declare handler-users-toggle-active) -(declare render-users-toggle-active) -(declare on-users-delete-clicked) -(declare handler-users-delete) -(declare render-users-delete) -(declare on-menu-clicked) -(declare handler-location) -(declare goto-location) -(declare reset-app) -(declare goto-register) - -(defn date-sql-to-pretty [sql-date] - (first (str/split (time-format/unparse pretty-formatter (time-format/parse sql-formatter (first (str/split sql-date ".")))) " Z"))) - -(defn markdown-to-html [markdown] - (let [converter (js/showdown.Converter.)] - (.makeHtml converter markdown))) - -(defn reduce-checkboxes [selector] - "Reduces the names of all checked checkboxes to a pipe-separated - list. Assumes that the checkboxes are named via the convention - `chk_something-more'. The important thing is the underscore - separating the throwaway prefix and the remaining useful - bit. `selector' will likely be something like: [id^='chk_']" - (reduce (fn [x y] - (cond (and x y) (str x "|" y) - (and x (not y)) x - (and (not x) y) y - :else "")) - (map (fn [elem] - (let [this (jquery (str "#" (dommy/attr elem :id)))] - (when (-> this (.prop "checked")) - (second (str/split (-> this (.prop "id")) "_"))))) - (.toArray (jquery selector))))) - -;; notifications - -(defn notifications [jsonobj] - (ck-notifications/maybe-message jsonobj) - (ck-notifications/maybe-error jsonobj)) - -(defn auth-notifications [jsonobj] - (cond (empty? (get jsonobj "errormsg")) - (notifications jsonobj) - :else - (do - (render-home "" (get jsonobj "errormsg")) - (render-menu)))) - -;; menu - -(hiccups/defhtml template-menu [menuitems] - [:ul {:class "nav nav-pills"} - (for [menuitem menuitems] - [:li {:class "nav-item"} - [:a {:class (cond (= (str/upper-case (get menuitem "handler")) - (str/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")]])]) - -(hiccups/defhtml template-menu-user [jsonobj] - [:div {:class "dropdown"} - [:button {:class "btn btn-primary dropdown-toggle" - :type "button" - :id "button-menu-user" - :data-toggle "dropdown" - :aria-haspopup "true" - :aria-expanded "false"} - (get jsonobj "label")] - [:div {:class "dropdown-menu" :aria-labelledby "button-menu-user"} - (for [menuitem (get jsonobj "menuitems")] - [:a {:class "dropdown-item" - :onclick (str (namespace ::x) ".on_menu_clicked('" (get menuitem "handler") "')")} - (get menuitem "label")])]]) - -(defn handler-menu [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#menu) (template-menu (get jsonobj "menuitems"))))) - -(defn handler-menu-user [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#menu-user) (template-menu-user jsonobj)))) - -(defn render-menu [] - (GET "/menu" {:handler handler-menu}) - (GET "/menu/user" {:handler handler-menu-user})) - -;; home - -(hiccups/defhtml template-home [jsonobj] - [:h1 {:style "text-align: center"} "Welcome to the studio of Carlos Konstanski"] - [: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] - [:h3 {:style "text-align: center"} (get jsonobj "title")] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x)) - [:div {:style "text-align: center"} - [:a {:href ""} "Forgot password?"]]) - -(defn handler-login [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications 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") - (goto-location "/login") - (get jsonobj "message") - (do - (dommy/set-html! (dommy/sel1 :#location) "/home") - (render-home) - (render-menu))))) - -(defn render-login-authenticate [] - (POST "/login/authenticate" - {:format :raw - :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 "You are now logged out" "") - (dommy/set-html! (dommy/sel1 :#location) "/home") - (render-menu))) - -(defn render-logout [] - (GET "/logout" {:handler handler-logout})) - -;; profile - -(hiccups/defhtml template-profile [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 {:class "modal-title"} "Profile - Modify"] - [:button {:type "button" - :class "close" - :data-dismiss "modal"} - "×"]] - [:div {:id "modify-body" - :class "modal-body" - :style "height: 460px;"}] - [:div {:class "modal-footer"} - [:button {:type "submit" - :class "btn btn-danger btn-default" - :data-dismiss "modal"} - [:span {:class "glyphicon glyphicon-remove"}] - "Cancel"]]]]]) - -(defn handler-profile [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-profile jsonobj)) - (render-profile-view))) - -(defn render-profile [] - (GET "/profile" {:handler handler-profile})) - -;; profile-view - -(hiccups/defhtml template-profile-view [jsonobj] - [:div {:style "text-align: right"} - [:img {:src "/static/images/edit.png" - :style "cursor:pointer; cursor:hand" - :onclick (str (namespace ::x) ".on_profile_modify_clicked()")}]] - [:div {:class "container"} - [:div {:class "row"} - [:div {:class "col" :style "text-align: right"} "Username:"] - [:div {:class "col-10"} (get jsonobj "username")]] - [:div {:class "row"} - [:div {:class "col" :style "text-align: right"} "First Name:"] - [:div {:class "col-10"} (get jsonobj "first_name")]] - [:div {:class "row"} - [:div {:class "col" :style "text-align: right"} "Last Name:"] - [:div {:class "col-10"} (get jsonobj "last_name")]] - [:div {:class "row"} - [:div {:class "col" :style "text-align: right"} "Email:"] - [:div {:class "col-10"} (get jsonobj "email")]] - [:div {:class "row"} - [:div {:class "col" :style "text-align: right"} "Phone:"] - [:div {:class "col-10"} (get jsonobj "phone")]]]) - -(defn handler-profile-view [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#content) (template-profile-view jsonobj)))) - -(defn render-profile-view [] - (GET "/profile/view" {:handler handler-profile-view})) - -;; profile-modify - -(defn on-profile-modify-clicked [] - (render-profile-modify)) - -(hiccups/defhtml template-profile-modify [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-profile-modify [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#modify-body) (template-profile-modify jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-profile-modify [] - (POST "/profile/modify" {:handler handler-profile-modify})) - -;; profile-modify-submit - -(defn on-profile-modify-submit-clicked [] - (when (-> (jquery "#profile-modify-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-profile-modify-submit))) - -(defn handler-profile-modify-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/profile"))) - -(defn render-profile-modify-submit [] - (POST "/profile/modify/submit" - {:format :raw - :params {:id (dommy/value (dommy/sel1 :#id)) - :username (dommy/value (dommy/sel1 :#username)) - :first_name (dommy/value (dommy/sel1 :#first_name)) - :last_name (dommy/value (dommy/sel1 :#last_name)) - :email (dommy/value (dommy/sel1 :#email)) - :phone (dommy/value (dommy/sel1 :#phone))} - :handler handler-profile-modify-submit})) - -;; password - -(hiccups/defhtml template-password [jsonobj] - [:h3 {:style "text-align: center"} (get jsonobj "title")] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-password [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-password jsonobj)))) - -(defn render-password [] - (GET "/password" {:handler handler-password})) - -;; password-submit - -(defn on-password-submit-clicked [] - (when (-> (jquery "#password-form") - (.get "0") - (.checkValidity)) - (render-password-submit))) - -(defn handler-password-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/password"))) - -(defn render-password-submit [] - (POST "/password/submit" - {:format :raw - :params {:id (dommy/value (dommy/sel1 :#id)) - :pwd (dommy/value (dommy/sel1 :#pwd)) - :pwd2 (dommy/value (dommy/sel1 :#pwd2))} - :handler handler-password-submit})) - -;; about-us - -(hiccups/defhtml template-about-us [jsonobj] - [:h1 {:style "text-align: center"} "About the Studio"] - [: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: 460px;"}] - [:div {:class "modal-footer"} - [:button {:type "submit" - :class "btn btn-danger btn-default" - :data-dismiss "modal"} - [:span {:class "glyphicon glyphicon-remove"}] - "Cancel"]]]]]) - -(defn handler-about-us [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-about-us jsonobj)) - (render-about-us-view))) - -(defn render-about-us [] - (GET "/about-us" {:handler handler-about-us})) - -;; about-us-view - -(hiccups/defhtml template-about-us-view [jsonobj] - (when (get jsonobj "adminP") - [:div {:style "text-align: right;"} - [:img {:src "/static/images/edit.png" - :style "cursor:pointer; cursor:hand" - :onclick (str (namespace ::x) ".on_about_us_modify_clicked()")}]]) - [:div {:id "markdown"}]) - -(defn handler-about-us-view [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#content) (template-about-us-view jsonobj)) - (dommy/set-html! (dommy/sel1 :#markdown) (markdown-to-html (get jsonobj "content"))))) - -(defn render-about-us-view [] - (GET "/about-us/view" {:handler handler-about-us-view})) - -;; about-us-modify - -(defn on-about-us-modify-clicked [] - (render-about-us-modify)) - -(hiccups/defhtml template-about-us-modify [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-about-us-modify [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#modify-title) "About Us - Modify") - (dommy/set-html! (dommy/sel1 :#modify-body) (template-about-us-modify jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-about-us-modify [] - (POST "/about-us/modify" {:handler handler-about-us-modify})) - -;; about-us-modify-submit - -(defn on-about-us-modify-submit-clicked [] - (when (-> (jquery "#about-us-modify-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-about-us-modify-submit))) - -(defn handler-about-us-modify-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#content) (template-about-us-view jsonobj)) - (dommy/set-html! (dommy/sel1 :#markdown) (markdown-to-html (get jsonobj "content"))))) - -(defn render-about-us-modify-submit [] - (POST "/about-us/modify/submit" - {:format :raw - :params {:content (dommy/value (dommy/sel1 :#txt-content))} - :handler handler-about-us-modify-submit})) - -;; gallery - -(hiccups/defhtml template-gallery [jsonobj] - [:h1 {:style "text-align: center"} "Gallery"] - [:div {:id "content"}] - [:div {:id "image" - :class "modal fade" - :role "dialog" - :tabindex "-1"} - [:div {:class "modal-dialog modal-lg mw-100 w-75"} - [:div {:class "modal-content"} - [:div {:class "modal-header"} - [:button {:type "button" - :class "close" - :data-dismiss "modal"} - "×"]] - [:div {:id "image-body" - :class "modal-body" - :style "width: 100%"}] - [:div {:class "modal-footer"} - [:button {:type "submit" - :class "btn btn-danger btn-default" - :data-dismiss "modal"} - [:span {:class "glyphicon glyphicon-remove"}] - "Close"]]]]] - [: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: 425px;"}] - [:div {:class "modal-footer"} - [:button {:type "submit" - :class "btn btn-danger btn-default" - :data-dismiss "modal"} - [:span {:class "glyphicon glyphicon-remove"}] - "Cancel"]]]]]) - -(defn handler-gallery [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-gallery jsonobj)) - (render-gallery-view))) - -(defn render-gallery [] - (GET "/gallery" {:handler handler-gallery})) - -;; gallery-view - -(hiccups/defhtml template-gallery-view [jsonobj] - [:div {:style "text-align: right"} - (when (get jsonobj "adminP") - [:img {:src "/static/images/add.png" - :style "cursor:pointer; cursor:hand" - :onclick (str (namespace ::x) ".on_gallery_add_clicked()")}])] - (let [results (get jsonobj "results")] - (cond (empty? results) - [:h5 {:style "text-align: center"} "No results found."] - :else - (for [rec results] - [:span {:style "width:720px; height:425px"} - [:table - [:tr - [:td - (cond (not (= (get rec "video_embed_url") "null")) - [:iframe {:width "720" - :height "405" - :src (get rec "video_embed_url") - :frameborder "0" - :allow "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" - :referrerpolicy "strict-origin-when-cross-origin" - :allowfullscreen "allowfullscreen"}] - :else - (let [img-src (str "/gallery/file/view?id=" (get rec "id"))] - [:img {:style "height:405px; cursor:pointer; cursor:hand" - :src img-src - :onclick (str (namespace ::x) ".on_gallery_image_clicked('" img-src "')")}]))] - (when (get jsonobj "adminP") - [:td {:style "text-align:right; vertical-align:top"} - [:img {:src "/static/images/edit.png" - :onclick (str (namespace ::x) ".on_gallery_modify_clicked(" (get rec "id") ")")}] - [:br] - [:img {:src "/static/images/delete.png" - :onclick (str (namespace ::x) ".on_gallery_delete_clicked(" (get rec "id") ")")}]])] - [:tr - [:td (get rec "description")]] - [:tr - [:td " "]] - [:tr - [:td " "]]]])))) - -(hiccups/defhtml template-gallery-image-fullscreen [src] - [:img {:src src - :style "width: 100%"}]) - -(defn on-gallery-image-clicked [src] - (dommy/set-html! (dommy/sel1 :#image-body) (template-gallery-image-fullscreen src)) - (.modal (jquery "#image"))) - -(defn handler-gallery-view [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#content) (template-gallery-view jsonobj)))) - -(defn render-gallery-view [] - (GET "/gallery/view" {:handler handler-gallery-view})) - -;; gallery-add - -(defn on-gallery-add-clicked [] - (render-gallery-add)) - -(hiccups/defhtml template-gallery-add [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-gallery-add [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#modify-title) "Gallery - Add") - (dommy/set-html! (dommy/sel1 :#modify-body) (template-gallery-add jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-gallery-add [] - (POST "/gallery/add" {:handler handler-gallery-add})) - -;; gallery-add-submit - -(defn on-gallery-add-submit-clicked [] - (when (-> (jquery "#gallery-add-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-gallery-add-submit))) - -(defn handler-gallery-add-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/gallery"))) - -(defn render-gallery-add-submit [] - (let [form-data (js/FormData. (dommy/sel1 :#gallery-add-form))] - (POST "/gallery/add/submit" - {:body form-data - :response-format (raw-response-format) - :handler handler-gallery-add-submit}))) - -;; gallery-modify - -(defn on-gallery-modify-clicked [id] - (render-gallery-modify id)) - -(hiccups/defhtml template-gallery-modify [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-gallery-modify [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#modify-title) "Gallery - Modify") - (dommy/set-html! (dommy/sel1 :#modify-body) (template-gallery-modify jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-gallery-modify [id] - (POST "/gallery/modify" - {:format :raw - :params {:id id} - :handler handler-gallery-modify})) - -;; gallery-modify-submit - -(defn on-gallery-modify-submit-clicked [] - (when (-> (jquery "#gallery-modify-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-gallery-modify-submit))) - -(defn handler-gallery-modify-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/gallery"))) - -(defn render-gallery-modify-submit [] - (let [form-data (js/FormData. (dommy/sel1 :#gallery-modify-form))] - (POST "/gallery/modify/submit" - {:body form-data - :response-format (raw-response-format) - :handler handler-gallery-add-submit}))) - -;; gallery-delete - -(defn on-gallery-delete-clicked [id] - (when (js/confirm (str "Are you sure you want to delete " id "? This action cannot be undone.")) - (render-gallery-delete id))) - -(defn handler-gallery-delete [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/gallery"))) - -(defn render-gallery-delete [id] - (POST "/gallery/delete" - {:format :raw - :params {:id id} - :handler handler-gallery-delete})) - -;; testimonials - -(hiccups/defhtml template-testimonials [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: 460px;"}] - [:div {:class "modal-footer"} - [:button {:type "submit" - :class "btn btn-danger btn-default" - :data-dismiss "modal"} - [:span {:class "glyphicon glyphicon-remove"}] - "Cancel"]]]]]) - -(defn handler-testimonials [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-testimonials jsonobj)) - (render-testimonials-view))) - -(defn render-testimonials [] - (GET "/testimonials" {:handler handler-testimonials})) - -;; testimonials-view - -(hiccups/defhtml template-testimonials-view [jsonobj] - (when (get jsonobj "adminP") - [:div {:style "text-align: right;"} - [:img {:src "/static/images/edit.png" - :style "cursor:pointer; cursor:hand" - :onclick (str (namespace ::x) ".on_testimonials_modify_clicked()")}]]) - [:div {:id "markdown"}]) - -(defn handler-testimonials-view [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#content) (template-testimonials-view jsonobj)) - (dommy/set-html! (dommy/sel1 :#markdown) (markdown-to-html (get jsonobj "content"))))) - -(defn render-testimonials-view [] - (GET "/testimonials/view" {:handler handler-testimonials-view})) - -;; testimonials-modify - -(defn on-testimonials-modify-clicked [] - (render-testimonials-modify)) - -(hiccups/defhtml template-testimonials-modify [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-testimonials-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-testimonials-modify jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-testimonials-modify [] - (POST "/testimonials/modify" {:handler handler-testimonials-modify})) - -;; testimonials-modify-submit - -(defn on-testimonials-modify-submit-clicked [] - (when (-> (jquery "#testimonials-modify-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-testimonials-modify-submit))) - -(defn handler-testimonials-modify-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/testimonials"))) - -(defn render-testimonials-modify-submit [] - (POST "/testimonials/modify/submit" - {:format :raw - :params {:content (dommy/value (dommy/sel1 :#txt-content))} - :handler handler-testimonials-modify-submit})) - -;; contact-us - -(hiccups/defhtml template-contact-us [jsonobj] - [:h1 {:style "text-align: center"} "Reach out to me by filling out the form."] - [:div {:id "content"}]) - -(defn handler-contact-us [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-contact-us jsonobj)) - (render-contact-us-view))) - -(defn render-contact-us [] - (GET "/contact-us" {:handler handler-contact-us})) - -;; contact-us-view - -(hiccups/defhtml template-contact-us-view [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-contact-us-view [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#content) (template-contact-us-view jsonobj)))) - -(defn render-contact-us-view [] - (GET "/contact-us/view" {:handler handler-contact-us-view})) - -;; contact-us-email - -(defn on-contact-us-email-submit-clicked [] - (render-contact-us-email-submit)) - -(defn handler-contact-us-email-submit [response] - (on-menu-clicked "/contact-us")) - -(defn render-contact-us-email-submit [] - (POST "/contact-us/email" - {:format :raw - :params {:first_name (dommy/value (dommy/sel1 :#first_name)) - :last_name (dommy/value (dommy/sel1 :#last_name)) - :email (dommy/value (dommy/sel1 :#email)) - :phone (dommy/value (dommy/sel1 :#phone)) - :comments (dommy/value (dommy/sel1 :#comments))} - :handler handler-contact-us-email-submit})) - -;; messages - -(hiccups/defhtml template-messages [jsonobj] - [:h3 {:style "text-align: center"} (get jsonobj "title")] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x)) - [:div {:id "results"}]) - -(defn handler-messages [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-messages jsonobj)) - (when (not (empty? (dommy/value (dommy/sel1 :#read)))) - (render-messages-results)))) - -(defn render-messages [] - (GET "/messages" {:handler handler-messages})) - -;; messages-results - -(defn on-messages-mode-clicked [read] - (dommy/set-value! (dommy/sel1 :#read) read) - (render-messages-results)) - -(hiccups/defhtml template-messages-results [jsonobj] - (let [results (get jsonobj "results") - keys (remove (fn [x] - (not (get (first results) x))) - (keys (first results)))] - (cond (empty? results) - [:h5 {:style "text-align: center"} "No results found."] - :else - [:table {:class "table table-hover"} - [:thead - [:tr - (for [key keys] - [:th key]) - [:th - (str "Mark " (cond (= (dommy/value (dommy/sel1 :#read)) "read") - "unread" - :else - "read"))]]] - [:tbody - (for [rec results] - (let [onclick "void()"] - [:tr - (for [key keys] - [:td {:onclick onclick} (get rec key)]) - [:td [:img {:src (str "/static/images/" - (cond (= (dommy/value (dommy/sel1 :#read)) "read") - "edit-undo.png" - :else - "edit-redo.png")) - :style "cursor: pointer; cursor: hand" - :onclick (str (namespace ::x) - ".on_messages_mark(" - (cond (= (dommy/value (dommy/sel1 :#read)) "read") - "'unread'" - :else - "'read'") - "," (get rec "id") ")")}]]]))]]))) - -(defn handler-messages-results [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#results) (template-messages-results jsonobj)))) - -(defn render-messages-results [] - (POST "/messages/results" - {:format :raw - :params {:read (dommy/value (dommy/sel1 :#read))} - :handler handler-messages-results})) - -;; messages-mark - -(defn on-messages-mark [read id] - (render-messages-mark read id)) - -(defn handler-messages-mark [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/messages"))) - -(defn render-messages-mark [read id] - (POST "/messages/mark" - {:format :raw - :params {:read read - :id id} - :handler handler-messages-mark})) - -;; users - -(hiccups/defhtml template-users [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-users [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#body) (template-users jsonobj)) - (render-users-view))) - -(defn render-users [] - (GET "/users" {:handler handler-users})) - -;; users-view - -(hiccups/defhtml template-users-view [jsonobj] - [:div {:style "text-align: right"} - [:img {:src "/static/images/add.png" - :style "cursor:pointer; cursor:hand" - :onclick (str (namespace ::x) ".on_users_add_clicked()")}]] - [:table {:class "table table-striped table-hover table-sm"} - [:thead - [:tr - [:th {:scope "col"} "Active?"] - [:th {:scope "col"} "Last Name"] - [:th {:scope "col"} "First Name"] - [:th {:scope "col"} "Username"] - [:th {:scope "col"} "Email"] - [:th {:scope "col"} "Phone"] - [:th {:scope "col"} "Del"]]] - [:tbody - (for [user (get jsonobj "users")] - (let [onclick (str (namespace ::x) ".on_users_modify_clicked(" (get user "id") ")") - toggle-active (str (namespace ::x) ".on_users_toggle_active_clicked(" (get user "id") ")")] - [:tr - [:td [:img {:src (cond (get user "active") - "/static/images/yes.png" - :else - "/static/images/no.png") - :onclick toggle-active}]] - [:td {:onclick onclick} (get user "last_name")] - [:td {:onclick onclick} (get user "first_name")] - [:td {:onclick onclick} (get user "username")] - [:td {:onclick onclick} (get user "email")] - [:td {:onclick onclick} (get user "phone")] - [:td [:img {:src "/static/images/delete.png" - :onclick (str (namespace ::x) ".on_users_delete_clicked(" (get user "id") ", '" (get user "first_name") "', '" (get user "last_name") "')")}]]]))]]) - -(defn handler-users-view [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#content) (template-users-view jsonobj)))) - -(defn render-users-view [] - (GET "/users/view" {:handler handler-users-view})) - -;; users-add - -(defn on-users-add-clicked [] - (render-users-add)) - -(hiccups/defhtml template-users-add [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-users-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-users-add jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-users-add [] - (POST "/users/add" {:handler handler-users-add})) - -;; users-add-submit - -(defn on-users-add-submit-clicked [] - (when (-> (jquery "#users-add-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-users-add-submit))) - -(defn handler-users-add-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/users"))) - -(defn render-users-add-submit [] - (POST "/users/add/submit" - {:format :raw - :params {:role_groups (reduce-checkboxes "[id^='chk_']") - :first_name (dommy/value (dommy/sel1 :#first_name)) - :last_name (dommy/value (dommy/sel1 :#last_name)) - :email (dommy/value (dommy/sel1 :#email))} - :handler handler-users-add-submit})) - -;; users-register - -(hiccups/defhtml template-users-register [jsonobj] - [:h3 {:style "text-align: center"} (get jsonobj "title")] - [:div {:id "content"}]) - -(defn handler-users-register [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (dommy/set-html! (dommy/sel1 :#body) (template-users-register jsonobj)) - (render-users-register-form (get jsonobj "hash")))) - -(defn render-users-register [hash] - (POST "/users/register" - {:format :raw - :params {:hash hash} - :handler handler-users-register})) - -;; users-register-form - -(hiccups/defhtml template-users-register-form [jsonobj] - (cond (get jsonobj "errormsg") - [:a {:href (str "javascript:" (namespace ::x) ".reset_app()")} - "Click here to return to the home page."] - :else - (do - [:p (str "Welcome " (get jsonobj "firstName") " " (get jsonobj "lastName") " to the new user registration page. Please fill out the form below to complete your registration.")] - [:p "Create a new username and password for your login to the website. Phone number is optional."] - [:p (str "Your email address is recorded as " (get jsonobj "email") ". This is where notifications will be sent. If this is not the desired email address, you can change it later by visiting the Edit Profile page.")] - [:p (str "This registration will expire in " (get jsonobj "validFor") ". Please submit this form before that time.")] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))))) - -(defn handler-users-register-form [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (dommy/set-html! (dommy/sel1 :#content) (template-users-register-form jsonobj)))) - -(defn render-users-register-form [hash] - (POST "/users/register/form" - {:format :raw - :params {:hash hash} - :handler handler-users-register-form})) - -;; users-register-submit - -(defn on-users-register-submit-clicked [] - (when (-> (jquery "#users-register-form") - (.get "0") - (.checkValidity)) - (render-users-register-submit))) - -(hiccups/defhtml template-users-register-submit [jsonobj] - [:a {:href (str "javascript:" (namespace ::x) ".reset_app()")} - "Click here to start using the website!"]) - -(defn handler-users-register-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (notifications jsonobj) - (cond (get jsonobj "errormsg") - (do - (dommy/set-value! (dommy/sel1 :#pwd) "") - (dommy/set-value! (dommy/sel1 :#pwd2) "")) - :else - (dommy/set-html! (dommy/sel1 :#content) (template-users-register-submit jsonobj))))) - -(defn render-users-register-submit [] - (POST "/users/register/submit" - {:format :raw - :params {:hash (dommy/value (dommy/sel1 :#hash)) - :username (dommy/value (dommy/sel1 :#username)) - :pwd (dommy/value (dommy/sel1 :#pwd)) - :pwd2 (dommy/value (dommy/sel1 :#pwd2)) - :phone (dommy/value (dommy/sel1 :#phone))} - :handler handler-users-register-submit})) - -;; users-modify - -(defn on-users-modify-clicked [id] - (render-users-modify id)) - -(hiccups/defhtml template-users-modify [jsonobj] - (ck-form/template-generic-form (get jsonobj "form") (namespace ::x))) - -(defn handler-users-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-users-modify jsonobj)) - (.modal (jquery "#modify")))) - -(defn render-users-modify [id] - (POST "/users/modify" - {:format :raw - :params {:id id} - :handler handler-users-modify})) - -;; users-modify-submit - -(defn on-users-modify-submit-clicked [] - (when (-> (jquery "#users-modify-form") - (.get "0") - (.checkValidity)) - (.modal (jquery "#modify") "hide") - (render-users-modify-submit))) - -(defn handler-users-modify-submit [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/users"))) - -(defn render-users-modify-submit [] - (POST "/users/modify/submit" - {:format :raw - :params {:id (dommy/value (dommy/sel1 :#id)) - :role_groups (reduce-checkboxes "[id^='chk_']") - :username (dommy/value (dommy/sel1 :#username)) - :first_name (dommy/value (dommy/sel1 :#first_name)) - :last_name (dommy/value (dommy/sel1 :#last_name)) - :email (dommy/value (dommy/sel1 :#email)) - :phone (dommy/value (dommy/sel1 :#phone))} - :handler handler-users-modify-submit})) - -;; users-toggle-active - -(defn on-users-toggle-active-clicked [id] - (render-users-toggle-active id)) - -(defn handler-users-toggle-active [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/users"))) - -(defn render-users-toggle-active [id] - (POST "/users/toggle-active" - {:format :raw - :params {:id id} - :handler handler-users-toggle-active})) - -;; users-delete - -(defn on-users-delete-clicked [id first-name last-name] - (when (js/confirm (str "Are you sure you want to delete " first-name " " last-name "? This action cannot be undone.")) - (render-users-delete id))) - -(defn handler-users-delete [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (auth-notifications jsonobj) - (on-menu-clicked "/users"))) - -(defn render-users-delete [id] - (POST "/users/delete" - {:format :raw - :params {:id id} - :handler handler-users-delete})) - -;; location - -(defn on-menu-clicked [handler] - (dommy/set-html! (dommy/sel1 :#location) handler) - (render-menu) - (cond (= handler "/home") (render-home) - (= handler "/login") (render-login) - (= handler "/logout") (render-logout) - (= handler "/profile") (render-profile) - (= handler "/password") (render-password) - (= handler "/about-us") (render-about-us) - (= handler "/gallery") (render-gallery) - (= handler "/testimonials") (render-testimonials) - (= handler "/contact-us") (render-contact-us) - (= handler "/messages") (render-messages) - (= handler "/users") (render-users))) - -(defn handler-location [response] - (let [jsonobj (js->clj (js/JSON.parse response))] - (on-menu-clicked (get jsonobj "location")) - (notifications jsonobj))) - -(defn goto-location [location] - (POST "/location" - {:format :raw - :params {:location location} - :handler handler-location})) - -(defn reset-app [] - (set! (.-location js/document) "/")) - -(defn goto-register [hash] - (dommy/set-html! (dommy/sel1 :#location) "/users/register") - (render-menu) - (render-users-register hash)) |
