stick system together

This commit is contained in:
jem 2018-05-22 18:01:22 +02:00
parent 3668b26df1
commit 7674a4c305
3 changed files with 51 additions and 6 deletions

View file

@ -8,7 +8,8 @@ smeagol.include and not inteded for direct usage."
[com.stuartsierra.component :as component]))
(s/defrecord Resolver
[type :- s/Keyword])
[type :- s/Keyword
local-base-dir :- s/Str])
;As schema does'nt support s/defprotocol we use the dispatcher for annotation & validation.
(s/defn dispatch-by-resolver-type :- s/Keyword
@ -38,5 +39,8 @@ smeagol.include and not inteded for direct usage."
(s/defn
new-resolver
[type :- s/Keyword]
(map->Resolver {:type type}))
([type :- s/Keyword]
(map->Resolver {:type type :local-base-dir nil}))
([type :- s/Keyword
local-base-dir :- s/Str]
(map->Resolver {:type type :local-base-dir local-base-dir})))

View file

@ -0,0 +1,27 @@
(ns ^{:doc "Functions related to the include of markdown-paged - providing
a plugable load-local-include-links componet. This namespaces is implementation detail for
smeagol.include and not inteded for direct usage."
:author "Michael Jerger"}
smeagol.include.resolve-local-file
(:require
[schema.core :as s]
[smeagol.include.resolve :as resolve]
[com.stuartsierra.component :as component]
[clojure.java.io :as cjio]
[taoensso.timbre :as timbre]))
(s/defmethod resolve/do-resolve-md :local-file
[resolver
uri :- s/Str]
(let [file-name (uri)
file-path (cjio/file (:local-base-dir resolver) file-name)
exists? (.exists (clojure.java.io/as-file file-path))]
(cond exists?
(do
(timbre/info (format "Including page '%s' from file '%s'" uri file-path))
(slurp file-path)))))
(s/defn
new-resolver
[local-base-dir :- s/Str]
(resolve/new-resolver :local-file local-base-dir))

View file

@ -20,7 +20,10 @@
[smeagol.sanity :refer [show-sanity-check-error]]
[smeagol.util :as util]
[smeagol.uploads :as ul]
[taoensso.timbre :as timbre]))
[taoensso.timbre :as timbre]
[com.stuartsierra.component :as component]
[smeagol.include.resolve-local-file :as resolve]
[smeagol.include :as include]))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;
@ -108,6 +111,14 @@
(edit-page request "stylesheet" ".css" "edit-css.html" "_edit-side-bar.md"))
(def md-include-system
(component/start
(component/system-map
:resolver (resolve/new-resolver util/content-dir)
:includer (component/using
(include/new-includer)
[:resolver]))))
(defn wiki-page
"Render the markdown page specified in this `request`, if any. If none found, redirect to edit-page"
[request]
@ -125,7 +136,10 @@
(merge (util/standard-params request)
{:title page
:page page
:content (md->html (slurp file-path))
:content (md->html
(include/expand-include-md
(:includer md-include-system)
(slurp file-path)))
:editable true})))
true (response/redirect (str "/edit?page=" page))))))