# HG changeset patch # User Zachary Kanfer # Date 1701659897 18000 # Sun Dec 03 22:18:17 2023 -0500 # Node ID 5116a0c09f4424badcd131dce3af640ca73efeaf # Parent 0bdac1354445a024a8a3e8a5798c15abd81ee594 add frontpage files to the rss feed diff --git a/site.arc b/site.arc --- a/site.arc +++ b/site.arc @@ -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 @@ (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 @@ (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 @@ (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 @@ (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 @@ (prn ")") (w/outfile rssfile rss-filename (w/stdout rssfile - (prn "") - (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 "") + (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.