OK, at this stage it's just an empty LuminusWeb project...

This commit is contained in:
Simon Brooke 2014-07-01 11:35:55 +01:00
commit e455387f96
19 changed files with 547 additions and 0 deletions

59
src/mw_ui/handler.clj Normal file
View 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
View 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
View 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
View 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
View 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
View 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)))