From 93338c9b7d9164b8f2729f9d0bf61a53d41c1606 Mon Sep 17 00:00:00 2001 From: Andrew Suzuki Date: Wed, 8 Jun 2016 14:06:32 -0400 Subject: [PATCH] resource switch tag filters --- src/cljs/ulysses/components/header.cljs | 14 +++++++++++-- src/cljs/ulysses/core.cljs | 3 ++- src/cljs/ulysses/db.cljs | 6 ++++++ src/cljs/ulysses/handlers.cljs | 27 +++++++++++++++++++++++-- src/cljs/ulysses/subs.cljs | 9 +++++++++ src/cljs/ulysses/utils.cljs | 3 +++ src/sass/app.scss | 1 + src/sass/components/_login.scss | 25 +++++++++++++++++++++++ src/sass/components/_uconn-banner.scss | 3 ++- 9 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 src/sass/components/_login.scss diff --git a/src/cljs/ulysses/components/header.cljs b/src/cljs/ulysses/components/header.cljs index 6972fe6..c26ae11 100644 --- a/src/cljs/ulysses/components/header.cljs +++ b/src/cljs/ulysses/components/header.cljs @@ -24,7 +24,16 @@ [link [:home] {} config/site-title]] [progress]]) -(defn- uconn-banner-right-menu-item [href fa-id] +(defn login [] + (let [user (subscribe [:user])] + (fn [] + (let [user @user] + [:div.login + (if-let [netid (:netid user)] + [:span "you are logged in as " netid] + [link "http://ulysses-api-staging.core/login" {} "log in"])])))) + +(defn uconn-banner-right-menu-item [href fa-id] [:li.nav-item [link href @@ -46,7 +55,8 @@ [link ovpr-url {:class :full} "Office of the Vice President for Research"]] [:ul.nav.navbar-nav.red-button-menu.pull-right [uconn-banner-right-menu-item "http://uconn.edu/search" :search] - [uconn-banner-right-menu-item "http://uconn.edu/az/" :sort-alpha-asc]]])))) + [uconn-banner-right-menu-item "http://uconn.edu/az/" :sort-alpha-asc]] + [login]])))) ;; ---------------------------------------------------------------------------- ;; main diff --git a/src/cljs/ulysses/core.cljs b/src/cljs/ulysses/core.cljs index c4c4c93..7322af3 100644 --- a/src/cljs/ulysses/core.cljs +++ b/src/cljs/ulysses/core.cljs @@ -22,7 +22,8 @@ #(dispatch [:window-scroll]))) (defn start-pollings [] - (js/setInterval #(dispatch [:window-resize]) 100)) + (js/setInterval #(dispatch [:window-resize]) 100) + (js/setInterval #(dispatch [:request-user-poll]) (* 30 1000))) (defn ^:export init [] (routes/app-routes) diff --git a/src/cljs/ulysses/db.cljs b/src/cljs/ulysses/db.cljs index e10fb6e..4dbe360 100644 --- a/src/cljs/ulysses/db.cljs +++ b/src/cljs/ulysses/db.cljs @@ -27,6 +27,12 @@ ; current window scroll position :window-scroll-position (window-scroll-position) + ;; ------------------------------------------------------------------------- + ;; user + ;; ------------------------------------------------------------------------- + + :user nil + ;; ------------------------------------------------------------------------- ;; data ;; ------------------------------------------------------------------------- diff --git a/src/cljs/ulysses/handlers.cljs b/src/cljs/ulysses/handlers.cljs index 1a6ca00..6427f6b 100644 --- a/src/cljs/ulysses/handlers.cljs +++ b/src/cljs/ulysses/handlers.cljs @@ -8,6 +8,7 @@ window-scroll-position clean-incoming-grant-op clean-incoming-grant-ops + boolean? parse-int-id str->int to-id-map @@ -48,7 +49,7 @@ (register-handler :window-resize - (fn [db [_]] + (fn [db _] (let [ws (window-size) ds (document-size)] (if (and (= ws (:window-size db)) (= ds (:document-size db))) @@ -58,7 +59,7 @@ (register-handler :window-scroll - (fn [db [_]] + (fn [db _] (assoc db :window-scroll-position (window-scroll-position)))) (register-handler @@ -77,6 +78,28 @@ (fn [db [_ response]] db)) ; do nothing for now +;; ---------------------------------------------------------------------------- +;; user +;; ---------------------------------------------------------------------------- + +(register-handler + :request-user-poll + (fn [db _] + (request db + [:login :poll] + :handler #(dispatch [:receive-user-poll %]) + ;; if server didn't respond or an error occurred, log out + :error-handler #(dispatch [:receive-user-poll false])))) + +(register-handler + :receive-user-poll + (fn [db [_ response]] + (println "login:" response) + (if-not (and (boolean? response) response) + ;; not logged in anymore, so nil the user + (assoc db :user nil) + db))) + ;; ---------------------------------------------------------------------------- ;; raw data ;; ---------------------------------------------------------------------------- diff --git a/src/cljs/ulysses/subs.cljs b/src/cljs/ulysses/subs.cljs index d952bbf..9b03cf6 100644 --- a/src/cljs/ulysses/subs.cljs +++ b/src/cljs/ulysses/subs.cljs @@ -51,6 +51,15 @@ (let [{:keys [page-current page-last]} @db] {:current page-current :last page-last})))) +;; ---------------------------------------------------------------------------- +;; user +;; ---------------------------------------------------------------------------- + +(register-sub + :user + (fn [db _] + (reaction (:user @db)))) + ;; ---------------------------------------------------------------------------- ;; raw data ;; ---------------------------------------------------------------------------- diff --git a/src/cljs/ulysses/utils.cljs b/src/cljs/ulysses/utils.cljs index d2bcac4..5620e3e 100644 --- a/src/cljs/ulysses/utils.cljs +++ b/src/cljs/ulysses/utils.cljs @@ -19,6 +19,9 @@ [& args] nil) +(defn boolean? [x] + (or (true? x) (false? x))) + (defn ptr "print x, then return it. useful for debugging inside threading macros or map" diff --git a/src/sass/app.scss b/src/sass/app.scss index 16ec49c..6fb2c1b 100644 --- a/src/sass/app.scss +++ b/src/sass/app.scss @@ -58,6 +58,7 @@ @import 'components/grant-op-boxes'; @import 'components/grant-op-filters'; @import 'components/grant-op-pagination'; +@import 'components/login'; @import 'components/main-logo'; @import 'components/modal-alpha'; @import 'components/not-found'; diff --git a/src/sass/components/_login.scss b/src/sass/components/_login.scss new file mode 100644 index 0000000..6ccdb56 --- /dev/null +++ b/src/sass/components/_login.scss @@ -0,0 +1,25 @@ +// login + +// NOTE +// this is within the relative uconn-banner + +.uconn-banner { + .login { + padding: .7rem 1rem 0 0; + position: absolute; + right: 0; + top: 60px; + } + + &.slim { + .login { + top: 40px; + } + } + + @media screen and (max-width: 850px) { + .login { + top: 40px; + } + } +} diff --git a/src/sass/components/_uconn-banner.scss b/src/sass/components/_uconn-banner.scss index 3d4988e..4457d8a 100644 --- a/src/sass/components/_uconn-banner.scss +++ b/src/sass/components/_uconn-banner.scss @@ -43,6 +43,7 @@ left: 0; margin-bottom: 8px; padding: 0 1rem; + position: relative; top: 0; user-select: none; width: 100%; @@ -82,7 +83,7 @@ } + .nav-item { - margin-left: 0.3rem; + margin-left: .3rem; } } }