site/rules.min
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
'hastysite import
;Routing
(
(dict) expect -> :meta
meta "id" dict.get :id
meta "ext" dict.get :ext
(
((id "home" ==) (
meta (
("index" "id" dict.set)
(".html" "ext" dict.set)
) tap
))
((true) (
meta (
(".html" "ext" dict.set)
("$1/index" (id) => % "id" dict.set)
) tap
))
) case
) ^set-destination
;Process Markdown content
(
(dict) expect -> :meta
"" :page
"" :contents
meta "content-type" dict.get :tpl
meta (
(input-fread @contents meta)
(settings "title" dict.get "site-title" dict.set)
(:temp contents temp markdown @contents temp)
(contents "contents" dict.set)
(:temp tpl temp mustache @page temp)
(page "contents" dict.set)
) tap
) ^process-content
;Process CSS asset
(
(dict) expect -> :meta
"" :contents
meta (
(input-fread @contents meta)
(:temp contents preprocess-css @contents temp)
(contents "contents" dict.set)
) tap
output-fwrite
) ^process-css-asset
;;; Main ;;;
;;Filter and sort posts by timestamp
contents
('content-type dict.has?) filter
("content-type" dict.get "post" ==) filter
(:a :b a "timestamp" dict.get b "timestamp" dict.get >) sort :posts
;;Process contents
contents (
(dict) expect -> :content
content ("id" dict.get "news" ==) (content posts "posts" dict.set @content) when
(
((content "id" dict.get "/" split last "^[._]" match?) ()) ;;Ignore files starting with a dot or underscore
((true) (content process-content set-destination output-fwrite))
) case
) foreach
;;Process assets
assets (
(dict) expect ->
stack.dup
(
(("ext" dict.get ".css" match?) (process-css-asset))
(("id" dict.get "/" split last "^[._]" match?) ()) ;;Ignore files starting with a dot or underscore
((true) (output-cp))
) case
) foreach
|