@@ 27,51 27,55 @@
frontpage-folder (string base "/frontpage/")
;; a folder holding extra files for the frontpage.
;; each of them should be a serialized arc obj
- ;; with keys date and frontpage.
+ ;; with keys date, frontpage, and navbar.
;; The date value is used for sorting,
;; and the frontpage value is printed on the frontpage.
codegen-folder (string base "/codegen/"))
- (unless (dir-exists published-folder)
- (err (string "Where's your published folder? I'm expecting it to be at " published-folder)))
- (when (dir-exists output-folder)
- (system (string "rm -r " output-folder)))
- (ensure-dir output-folder)
- (msince start-time "Getting divs-and-scripts: ")
- (with (navbar-div (get-navbar-div published-folder config)
- analytics-script (get-analytics-script base)
- src-filepaths (get-src-filepaths published-folder)
- codegen-filepaths (get-codegen-filepaths codegen-folder)
- tag-map (get-tags published-folder))
- (msince start-time "Copying pregenerated folder: ")
- (when (dir-exists pregenerated-folder)
- (copy-pregenerated-folder pregenerated-folder output-folder analytics-script))
- (msince start-time "Generating rss feed: ")
- (generate-rss-feed (string output-folder "feed.rss") src-filepaths config)
- (msince start-time "Generating pages: ")
- (each src-filepath src-filepaths
- (genpage src-filepath
- output-folder
- navbar-div
- analytics-script
- config
- tag-map))
- (msince start-time "Codegeneration: ")
- (each codegen-filepath codegen-filepaths
- (codegenpage codegen-filepath
- output-folder
- analytics-script
- config
- pregenerated-folder))
- (msince start-time "Generating frontpage: ")
- (prn-frontpage published-folder
- frontpage-folder
- output-folder
- navbar-div
- analytics-script
- config)
- (msince start-time "Generating tags page: ")
- (prn-tagspage tag-map output-folder navbar-div analytics-script config))
+ (unless (dir-exists published-folder)
+ (err (string "Where's your published folder? I'm expecting it to be at " published-folder)))
+ (when (dir-exists output-folder)
+ (system (string "rm -r " output-folder)))
+ (ensure-dir output-folder)
+ (msince start-time "Getting divs-and-scripts: ")
+ (with (navbar-div (get-navbar-div published-folder config)
+ analytics-script (get-analytics-script base)
+ src-filepaths (get-src-filepaths published-folder)
+ frontpage-filepaths (get-frontpage-filepaths frontpage-folder)
+ codegen-filepaths (get-codegen-filepaths codegen-folder)
+ tag-map (get-tags published-folder))
+ (msince start-time "Copying pregenerated folder: ")
+ (when (dir-exists pregenerated-folder)
+ (copy-pregenerated-folder pregenerated-folder output-folder analytics-script))
+ (msince start-time "Generating rss feed: ")
+ ;; (generate-rss-feed (string output-folder "feed.rss") src-filepaths config)
+ (generate-rss-feed (string output-folder "feed.rss") (join src-filepaths frontpage-filepaths) config)
+ (msince start-time "Generating pages: ")
+ (prn "frontpage-filepaths: " frontpage-filepaths)
+ (prn "src-filepaths: " src-filepaths)
+ (each src-filepath src-filepaths
+ (genpage src-filepath
+ output-folder
+ navbar-div
+ analytics-script
+ config
+ tag-map))
+ (msince start-time "Codegeneration: ")
+ (each codegen-filepath codegen-filepaths
+ (codegenpage codegen-filepath
+ output-folder
+ analytics-script
+ config
+ pregenerated-folder))
+ (msince start-time "Generating frontpage: ")
+ (prn-frontpage published-folder
+ frontpage-folder
+ output-folder
+ navbar-div
+ analytics-script
+ config)
+ (msince start-time "Generating tags page: ")
+ (prn-tagspage tag-map output-folder navbar-div analytics-script config))
(prn "generated site at "
base
" in "
@@ 107,6 111,10 @@ This returns fully qualified path names.
(map [string codegen-folder "/" _]
filenames))))
+(def get-frontpage-filepaths (frontpage-folder)
+ (let raw-pathnames (map [string frontpage-folder "/" _] (dir frontpage-folder))
+ (keep file-exists raw-pathnames)))
+
(def get-config (config-location)
"Get the config, as a hash from CONFIG-LOCATION.
@@ 160,9 168,12 @@ page-specific-headers"
(def get-body (filepath)
(w/infile infile filepath
- (when (is (peekc infile) #\()
- (read-table infile))
- (string (drain (readline infile)))))
+ (with (options (when (is (peekc infile) #\()
+ (read-table infile))
+ body-after-options (string (drain (readline infile))))
+ (if (blank body-after-options)
+ options!frontpage
+ body-after-options))))
(def get-option (filepath option-name (o default nil))
"Looks at the options for filepath, and returns option-name, or default if it's not there"
@@ 367,28 378,28 @@ title, url-slug, body."
(withs (published-files (keep file-exists
(map [string published-folder "/" _]
(dir published-folder)))
- frontpage-files (and frontpage-folder
- (dir-exists frontpage-folder)
- (keep file-exists
- (map [string frontpage-folder "/" _]
- (dir frontpage-folder))))
- files (+ published-files frontpage-files)
- sorted-options (get-sorted-options-for-files files)
- public-sorted-options (keep page-is-public sorted-options))
- (w/outfile dest (+ output-folder "index.html")
- (w/stdout dest
- (prn-html-page
- config!sitename
- "index"
- navbar-div
- (obj)
- (instring (tostring
- (prn)
- (each option public-sorted-options
- (awhen option!frontpage
- (prn (make-frontpage-blurb option))))))
- analytics-script
- config)))))
+ frontpage-files (and frontpage-folder
+ (dir-exists frontpage-folder)
+ (keep file-exists
+ (map [string frontpage-folder "/" _]
+ (dir frontpage-folder))))
+ files (+ published-files frontpage-files)
+ sorted-options (get-sorted-options-for-files files)
+ public-sorted-options (keep page-is-public sorted-options))
+ (w/outfile dest (+ output-folder "index.html")
+ (w/stdout dest
+ (prn-html-page
+ config!sitename
+ "index"
+ navbar-div
+ (obj)
+ (instring (tostring
+ (prn)
+ (each option public-sorted-options
+ (awhen option!frontpage
+ (prn (make-frontpage-blurb option))))))
+ analytics-script
+ config)))))
(def make-frontpage-blurb (options)
(withs (raw-blurb options!frontpage)
@@ 510,7 521,8 @@ for example 04 Feb 2018 00:00:00 EST."
(def should-include-in-rss-feed (file-options)
(and file-options!date
- file-options!frontpage
+ file-options!title
+ file-options!url-slug
(page-is-public file-options)))
(def generate-rss-feed (rss-filename src-filepaths site-config)
@@ 521,26 533,26 @@ for example 04 Feb 2018 00:00:00 EST."
(prn ")")
(w/outfile rssfile rss-filename
(w/stdout rssfile
- (prn "<?xml version=\"1.0\"?>")
- (tag (rss version "2.0"
- "xml:base" site-config!site-root
- "xmlns:atom" "http://www.w3.org/2005/Atom")
- (prn)
- (tag channel
- (tag title (pr site-config!sitename))
- (tag link (pr site-config!site-root))
- (tag ("atom:link" rel "self" href (string site-config!site-root "/feed.rss")))
- (tag description (pr site-config!description))
- (prn)
- (each (options body)
- (sort (fn ((options1 body1) (options2 body2))
- (> options1!date options2!date))
- (keep (fn ((options body)) (should-include-in-rss-feed options))
- (map [list (get-options _) (get-body _)]
- src-filepaths)))
- (generate-rss-entry options body site-config)
- (prn)))
- (prn)))))
+ (prn "<?xml version=\"1.0\"?>")
+ (tag (rss version "2.0"
+ "xml:base" site-config!site-root
+ "xmlns:atom" "http://www.w3.org/2005/Atom")
+ (prn)
+ (tag channel
+ (tag title (pr site-config!sitename))
+ (tag link (pr site-config!site-root))
+ (tag ("atom:link" rel "self" href (string site-config!site-root "/feed.rss")))
+ (tag description (pr site-config!description))
+ (prn)
+ (each (options body)
+ (sort (fn ((options1 body1) (options2 body2))
+ (> options1!date options2!date))
+ (keep (fn ((options body)) (should-include-in-rss-feed options))
+ (map [list (get-options _) (get-body _)]
+ src-filepaths)))
+ (generate-rss-entry options body site-config)
+ (prn)))
+ (prn)))))
(def load-codegen (location pregenerated-folder site-root)
"Evaluates a codegen file located at LOCATION.