OK, at this stage it's just an empty LuminusWeb project...
This commit is contained in:
commit
e455387f96
19 changed files with 547 additions and 0 deletions
59
src/mw_ui/handler.clj
Normal file
59
src/mw_ui/handler.clj
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
(ns mw-ui.handler
|
||||
(:require [compojure.core :refer [defroutes]]
|
||||
[mw-ui.routes.home :refer [home-routes]]
|
||||
[mw-ui.middleware :refer [load-middleware]]
|
||||
[noir.response :refer [redirect]]
|
||||
[noir.util.middleware :refer [app-handler]]
|
||||
[compojure.route :as route]
|
||||
[taoensso.timbre :as timbre]
|
||||
[taoensso.timbre.appenders.rotor :as rotor]
|
||||
[selmer.parser :as parser]
|
||||
[environ.core :refer [env]]))
|
||||
|
||||
(defroutes app-routes
|
||||
(route/resources "/")
|
||||
(route/not-found "Not Found"))
|
||||
|
||||
(defn init
|
||||
"init will be called once when
|
||||
app is deployed as a servlet on
|
||||
an app server such as Tomcat
|
||||
put any initialization code here"
|
||||
[]
|
||||
(timbre/set-config!
|
||||
[:appenders :rotor]
|
||||
{:min-level :info
|
||||
:enabled? true
|
||||
:async? false ; should be always false for rotor
|
||||
:max-message-per-msecs nil
|
||||
:fn rotor/appender-fn})
|
||||
|
||||
(timbre/set-config!
|
||||
[:shared-appender-config :rotor]
|
||||
{:path "mw_ui.log" :max-size (* 512 1024) :backlog 10})
|
||||
|
||||
(if (env :dev) (parser/cache-off!))
|
||||
(timbre/info "mw-ui started successfully"))
|
||||
|
||||
(defn destroy
|
||||
"destroy will be called when your application
|
||||
shuts down, put any clean up code here"
|
||||
[]
|
||||
(timbre/info "mw-ui is shutting down..."))
|
||||
|
||||
|
||||
|
||||
(def app (app-handler
|
||||
;; add your application routes here
|
||||
[home-routes app-routes]
|
||||
;; add custom middleware here
|
||||
:middleware (load-middleware)
|
||||
;; timeout sessions after 30 minutes
|
||||
:session-options {:timeout (* 60 30)
|
||||
:timeout-response (redirect "/")}
|
||||
;; add access rules here
|
||||
:access-rules []
|
||||
;; serialize/deserialize the following data formats
|
||||
;; available formats:
|
||||
;; :json :json-kw :yaml :yaml-kw :edn :yaml-in-html
|
||||
:formats [:json-kw :edn]))
|
||||
24
src/mw_ui/layout.clj
Normal file
24
src/mw_ui/layout.clj
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
(ns mw-ui.layout
|
||||
(:require [selmer.parser :as parser]
|
||||
[clojure.string :as s]
|
||||
[ring.util.response :refer [content-type response]]
|
||||
[compojure.response :refer [Renderable]]))
|
||||
|
||||
(def template-path "templates/")
|
||||
|
||||
(deftype RenderableTemplate [template params]
|
||||
Renderable
|
||||
(render [this request]
|
||||
(content-type
|
||||
(->> (assoc params
|
||||
(keyword (s/replace template #".html" "-selected")) "active"
|
||||
:servlet-context
|
||||
(if-let [context (:servlet-context request)]
|
||||
(.getContextPath context)))
|
||||
(parser/render-file (str template-path template))
|
||||
response)
|
||||
"text/html; charset=utf-8")))
|
||||
|
||||
(defn render [template & [params]]
|
||||
(RenderableTemplate. template params))
|
||||
|
||||
24
src/mw_ui/middleware.clj
Normal file
24
src/mw_ui/middleware.clj
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
(ns mw-ui.middleware
|
||||
(:require [taoensso.timbre :as timbre]
|
||||
[selmer.parser :as parser]
|
||||
[environ.core :refer [env]]
|
||||
[selmer.middleware :refer [wrap-error-page]]
|
||||
[noir-exception.core
|
||||
:refer [wrap-internal-error wrap-exceptions]]))
|
||||
|
||||
(defn log-request [handler]
|
||||
(fn [req]
|
||||
(timbre/debug req)
|
||||
(handler req)))
|
||||
|
||||
(def development-middleware
|
||||
[log-request
|
||||
wrap-error-page
|
||||
wrap-exceptions])
|
||||
|
||||
(def production-middleware
|
||||
[#(wrap-internal-error % :log (fn [e] (timbre/error e)))])
|
||||
|
||||
(defn load-middleware []
|
||||
(concat (when (env :dev) development-middleware)
|
||||
production-middleware))
|
||||
34
src/mw_ui/repl.clj
Normal file
34
src/mw_ui/repl.clj
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
(ns mw-ui.repl
|
||||
(:use mw-ui.handler
|
||||
ring.server.standalone
|
||||
[ring.middleware file-info file]))
|
||||
|
||||
(defonce server (atom nil))
|
||||
|
||||
(defn get-handler []
|
||||
;; #'app expands to (var app) so that when we reload our code,
|
||||
;; the server is forced to re-resolve the symbol in the var
|
||||
;; rather than having its own copy. When the root binding
|
||||
;; changes, the server picks it up without having to restart.
|
||||
(-> #'app
|
||||
; Makes static assets in $PROJECT_DIR/resources/public/ available.
|
||||
(wrap-file "resources")
|
||||
; Content-Type, Content-Length, and Last Modified headers for files in body
|
||||
(wrap-file-info)))
|
||||
|
||||
(defn start-server
|
||||
"used for starting the server in development mode from REPL"
|
||||
[& [port]]
|
||||
(let [port (if port (Integer/parseInt port) 3000)]
|
||||
(reset! server
|
||||
(serve (get-handler)
|
||||
{:port port
|
||||
:init init
|
||||
:auto-reload? true
|
||||
:destroy destroy
|
||||
:join? false}))
|
||||
(println (str "You can view the site at http://localhost:" port))))
|
||||
|
||||
(defn stop-server []
|
||||
(.stop @server)
|
||||
(reset! server nil))
|
||||
15
src/mw_ui/routes/home.clj
Normal file
15
src/mw_ui/routes/home.clj
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
(ns mw-ui.routes.home
|
||||
(:use compojure.core)
|
||||
(:require [mw-ui.layout :as layout]
|
||||
[mw-ui.util :as util]))
|
||||
|
||||
(defn home-page []
|
||||
(layout/render
|
||||
"home.html" {:content (util/md->html "/md/docs.md")}))
|
||||
|
||||
(defn about-page []
|
||||
(layout/render "about.html"))
|
||||
|
||||
(defroutes home-routes
|
||||
(GET "/" [] (home-page))
|
||||
(GET "/about" [] (about-page)))
|
||||
10
src/mw_ui/util.clj
Normal file
10
src/mw_ui/util.clj
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
(ns mw-ui.util
|
||||
(:require [noir.io :as io]
|
||||
[markdown.core :as md]))
|
||||
|
||||
(defn md->html
|
||||
"reads a markdown file from public/md and returns an HTML string"
|
||||
[filename]
|
||||
(->>
|
||||
(io/slurp-resource filename)
|
||||
(md/md-to-html-string)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue