Selmer style and script tags are not working cleanly for me.

This commit is contained in:
Simon Brooke 2021-05-17 08:22:21 +01:00
parent a805f3ccc5
commit d43eb22cd3
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987
6 changed files with 84 additions and 63 deletions
.gitignoreproject.clj
resources/templates
src/clj/youyesyet/routes

8
.gitignore vendored
View file

@ -49,3 +49,11 @@ youyesyet\.dump\.20180816
*.tar *.tar
src/clj/youyesyet/cache\.clj src/clj/youyesyet/cache\.clj
.lsp/sqlite.db
.settings/
.classpath
.project

View file

@ -51,7 +51,7 @@
[ring/ring-servlet "1.7.1"] [ring/ring-servlet "1.7.1"]
[ring-webjars "0.2.0"] [ring-webjars "0.2.0"]
[secretary "1.2.3"] [secretary "1.2.3"]
[selmer "1.12.17"]] [selmer "1.12.40"]]
:deploy-repositories [["releases" :clojars] :deploy-repositories [["releases" :clojars]
["snapshots" :clojars]] ["snapshots" :clojars]]

View file

@ -42,13 +42,13 @@
{% endblock %} {% endblock %}
{% block extra-tail %} {% block extra-tail %}
<!-- scripts and styles --> <!-- scripts and styles -->
<!-- ATTENTION \/ -->
<!-- ATTENTION /\ -->
<!-- Leaflet --> <!-- Leaflet -->
<link rel="stylesheet" href="js/lib/node_modules/leaflet/dist/leaflet.css" /> <link rel="stylesheet" href="{{servlet-context}}/js/lib/node_modules/leaflet/dist/leaflet.css" />
{% script "js/lib/node_modules/signature_pad/dist/signature_pad.min.js" %} <script src="{{servlet-context}}/js/lib/node_modules/leaflet/dist/leaflet.js"></script>
{% script "js/lib/node_modules/leaflet/dist/leaflet.js" %} <!-- Signature pad -->
{% script "/js/app.js" %} <script src="{{servlet-context}}/js/lib/node_modules/signature_pad/dist/signature_pad.min.js"></script>
<!-- our actual app -->
<script src="{{servlet-context}}/js/app.js"></script>
{% endblock %} {% endblock %}

View file

@ -6,17 +6,20 @@
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/> <meta name="viewport" content="width=device-width, initial-scale=1"/>
<meta name="referrer" content="same-origin"> <meta name="referrer" content="same-origin">
{% style "/css/yyy-common.css" %} <link rel="stylesheet" type="text/css" href="{{servlet-context}}/css/yyy-common.css" />
{% style "/css/yyy-site.css" %} <link rel="stylesheet" type="text/css" href="{{servlet-context}}/css/yyy-site.css" />
{% style "/css/spinner.css" %} <link rel="stylesheet" type="text/css" href="{{servlet-context}}/css/spinner.css" />
<link href="https://fonts.googleapis.com/css?family=Archivo+Black|Archivo+Narrow" rel="stylesheet"/> <link href="https://fonts.googleapis.com/css?family=Archivo+Black|Archivo+Narrow" rel="stylesheet"/>
{% script "/js/lib/node_modules/jquery/dist/jquery.min.js" %} <script src="{{servlet-context}}/js/lib/node_modules/jquery/dist/jquery.min.js"></script>
<title>{{site-title}}: {{title}}</title> <title>{{site-title}}: {{title}}</title>
{% endblock %} {% endblock %}
{% block extra-head %} {% block extra-head %}
<!-- extra-head: put any additional markup to go into the head of your document into this block --> <!-- extra-head: put any additional markup to go into the head of your document into this block -->
<!-- e.g. script tags, link tags --> <!-- e.g. script tags, link tags -->
{% endblock %} {% endblock %}
{% if servlet-context %}
<!-- Servlet context is {{servlet-context}} -->
{% endif %}
</head> </head>
<body> <body>
{% block whole-page %} {% block whole-page %}
@ -87,12 +90,12 @@
<!-- foot: override this block if you don't want the standard footer --> <!-- foot: override this block if you don't want the standard footer -->
<footer> <footer>
<div id="credits"> <div id="credits">
<!-- div> <div>
<img src="{{servlet-context}}/img/credits/ric-logo.png" width="24" height="24"/> <img src="{{servlet-context}}/img/credits/ric-logo.png" width="24" height="24"/>
A project of the A project of the
<a href="https://radical.scot/">Radical Independence Campaign</a> || <a href="https://radical.scot/">Radical Independence Campaign</a> ||
Version {{version}} Version {{version}}
</div --> </div>
<div> <div>
<img height="16" width="16" alt="Clojure" src="{{servlet-context}}/img/credits/luminus-logo.png"/>Built with <a href="http://www.luminusweb.net/">LuminusWeb</a> || <img height="16" width="16" alt="Clojure" src="{{servlet-context}}/img/credits/luminus-logo.png"/>Built with <a href="http://www.luminusweb.net/">LuminusWeb</a> ||
<img height="16" width="16" alt="Clojure" src="{{servlet-context}}/img/credits/clojure-icon.gif"/> Powered by <a href="http://clojure.org">Clojure</a> || <img height="16" width="16" alt="Clojure" src="{{servlet-context}}/img/credits/clojure-icon.gif"/> Powered by <a href="http://clojure.org">Clojure</a> ||

View file

@ -12,8 +12,7 @@
[youyesyet.db.core :as db-core] [youyesyet.db.core :as db-core]
[youyesyet.layout :as layout] [youyesyet.layout :as layout]
[youyesyet.oauth :as oauth] [youyesyet.oauth :as oauth]
[compojure.core :refer [defroutes GET POST]] [compojure.core :refer [defroutes GET POST]]))
))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;; ;;;;
@ -48,27 +47,30 @@
(if (.exists motd) (slurp motd) ""))) (if (.exists motd) (slurp motd) "")))
(defn about-page [] (defn about-page [request]
(layout/render "md.html" {:title (layout/render "md.html" {:title
(str "About " (:site-title env)) (str "About " (:site-title env))
:content (md-to-html-string (slurp (io/resource "about.md")))})) :servlet-context (:servlet-context request)
:content (md-to-html-string (slurp (io/resource "about.md")))}))
(defn call-me-page [request] (defn call-me-page [request]
(if (if
request request
(do (do
;; do something to store it in the database ;; do something to store it in the database
(layout/render "call-me-accepted.html" (:session request) (:params request))) (layout/render "call-me-accepted.html" (:session request) (:params request)))
(layout/render "call-me.html" (:session request) (layout/render "call-me.html" (:session request)
{:title "Please call me!" {:title "Please call me!"
:servlet-context (:servlet-context request)
;; TODO: Issues need to be fetched from the database ;; TODO: Issues need to be fetched from the database
:concerns (db-core/list-issues db-core/*db* {})}))) :concerns (db-core/list-issues db-core/*db* {})})))
(defn home-page [] (defn home-page [request]
(layout/render "home.html" {:title "You yes yet?" (layout/render "home.html" {:title "You yes yet?"
:motd (md-to-html-string (motd))})) :servlet-context (:servlet-context request)
:motd (md-to-html-string (motd))}))
(defn login-page (defn login-page
@ -77,58 +79,62 @@
(let [params (keywordize-keys (:params request)) (let [params (keywordize-keys (:params request))
session (:session request) session (:session request)
username (:username params) username (:username params)
user (if username (db-core/get-canvasser-by-username db-core/*db* {:username username})) user (when username (db-core/get-canvasser-by-username db-core/*db* {:username username}))
password (:password params) password (:password params)
redirect-to (or redirect-to (or
(:redirect-to params) (:redirect-to params)
(str (:servlet-context request) "/roles"))] (str (:servlet-context request) "/roles"))]
(cond (cond
(:authority params) (:authority params)
(let [auth (oauth/authority! (:authority params))] (let [auth (oauth/authority! (:authority params))]
(if auth (if auth
(do (do
(log/info "Attempting to authorise with authority " (:authority params)) (log/info "Attempting to authorise with authority " (:authority params))
(oauth/fetch-request-token (oauth/fetch-request-token
(assoc request :session (assoc session :authority auth)) (assoc request :session (assoc session :authority auth))
auth)) auth))
(throw (Exception. (str "No such authority: " (:authority params)))))) (throw (Exception. (str "No such authority: " (:authority params))))))
;; this is obviously, ABSURDLY, insecure. I don't want to put just-about-good-enough, ;; this is obviously, ABSURDLY, insecure. I don't want to put just-about-good-enough,
;; it-will-do-for-now security in place; instead, I want this to be test code only ;; it-will-do-for-now security in place; instead, I want this to be test code only
;; until we have o-auth properly working. ;; until we have o-auth properly working.
(and user (= username password)) (and user (= username password))
(let (let
[roles (layout/get-user-roles user)] [roles (layout/get-user-roles user)]
(log/info (str "Logged in user '" username "' with roles " roles)) (log/info (str "Logged in user '" username "' with roles " roles))
(assoc (assoc
(response/found redirect-to) (response/found redirect-to)
:session :session
(assoc session :user (assoc user :roles roles)))) (assoc session :user (assoc user :roles roles))))
;; if we've got a username but either no user object or else ;; if we've got a username but either no user object or else
;; the password doesn't match ;; the password doesn't match
username username
(layout/render (layout/render
"login.html" "login.html"
{:title (str "User " username " is unknown") {:title (str "User " username " is unknown")
:servlet-context (:servlet-context request)
:redirect-to redirect-to :redirect-to redirect-to
:warnings ["Your user name was not recognised or your password did not match"]}) :warnings ["Your user name was not recognised or your password did not match"]})
;; if we've no username, just invite the user to log in ;; if we've no username, just invite the user to log in
:else :else
(layout/render (layout/render
"login.html" "login.html"
{:title "Please log in" {:title "Please log in"
:servlet-context (:servlet-context request)
:redirect-to redirect-to :redirect-to redirect-to
:authorities (db-core/list-authorities db-core/*db*)})))) :authorities (db-core/list-authorities db-core/*db*)}))))
(defroutes home-routes (defroutes home-routes
(GET "/" [] (home-page)) (GET "/" [request] (home-page request))
(GET "/home" [] (home-page)) (GET "/home" [request] (home-page request))
(GET "/about" [] (about-page)) (GET "/about" [request] (about-page request))
(GET "/call-me" [] (call-me-page nil)) (GET "/call-me" [request] (call-me-page request))
(POST "/call-me" request (call-me-page request)) (POST "/call-me" request (call-me-page request))
(GET "/login" request (login-page request)) (GET "/login" request (login-page request))
(POST "/login" request (login-page request)) (POST "/login" request (login-page request))
(GET "/notyet" [] (layout/render "notyet.html" (GET "/notyet" [request] (layout/render "notyet.html"
{:title "Can we persuade you?"})) {:title "Can we persuade you?"
(GET "/supporter" [] (layout/render "supporter.html" :servlet-context (:servlet-context request)}))
{:title "Have you signed up as a canvasser yet?"}))) (GET "/supporter" [request] (layout/render "supporter.html"
{:title "Have you signed up as a canvasser yet?"
:servlet-context (:servlet-context request)})))

View file

@ -15,30 +15,33 @@
[youyesyet.routes.auto :as auto])) [youyesyet.routes.auto :as auto]))
(defn roles-page [request] (defn roles-page
"Render the routing page for the roles the currently logged in user is member of." "Render the routing page for the roles the currently logged in user is member of."
[request]
(let (let
[session (:session request) [session (:session request)
user (-> request :session :user) user (-> request :session :user)
roles (if roles (if
user user
(db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))] (db-core/list-roles-by-canvasser db-core/*db* {:id (:id user)}))]
(log/info (str "Roles routing page; user is " user "; roles are " roles)) (log/info (str "Roles routing page; user is " user "; roles are " roles))
(if (if
roles roles
(layout/render (layout/render
"roles.html" "roles.html"
{:title (str "Welcome " (:fullname user) ", what do you want to do?") {:title (str "Welcome " (:fullname user) ", what do you want to do?")
:user user :servlet-context (:servlet-context request)
:roles (map #(assoc % :link (safe-name (:name %) :sql)) roles)}) :user user
:roles (map #(assoc % :link (safe-name (:name %) :sql)) roles)})
(assoc (response/found "/login") :session (dissoc session :user))))) (assoc (response/found "/login") :session (dissoc session :user)))))
(defn admins-page (defn admins-page
[request] [request]
(layout/render (layout/render
(support/resolve-template "application-index.html") (support/resolve-template "application-index.html")
{:title "Administrative menu"})) {:title "Administrative menu"
:servlet-context (:servlet-context request)}))
(defn analysts-page (defn analysts-page
@ -47,22 +50,23 @@
anything sophisticated here." anything sophisticated here."
[request] [request]
(layout/render (layout/render
(support/resolve-template "application-index.html") (support/resolve-template "application-index.html")
{:title "Administrative menu"})) {:title "Administrative menu"
:servlet-context (:servlet-context request)}))
(defn canvassers-page (defn canvassers-page
[request] [request]
(layout/render (layout/render
"roles/canvasser.html" "roles/canvasser.html"
{})) {:servlet-context (:servlet-context request)}))
(defn team-organisers-page (defn team-organisers-page
[request] [request]
(layout/render (layout/render
"roles/team-orgenisers.html" "roles/team-orgenisers.html"
{})) {:servlet-context (:servlet-context request)}))
(defroutes roles-routes (defroutes roles-routes