Files
natalieee.net/www/src/pages/html/view-thought.hy

83 lines
3.8 KiB
Hy

(do ;; required for arcane scoping
(defn check-param-defined [param-name]
#[f[test "$(echo '{{' '{param-name}' '}}' | sed 's/ //g')" != '{{{param-name}}}']f])
(defn if-param-then-else [param-name param-defined otherwise [echo True]]
#[f[ {(check-param-defined param-name)} && {(if echo "echo " "")}{param-defined} || {(if echo "echo " "")}{otherwise} ]f])
(defn param-if-param-else [param-name otherwise]
(if-param-then-else param-name f"'{{{param-name}}}'" otherwise))
(defn get-thought-param-field [field]
#[f[ cat www/data/thought-registry | grep -P '\t{{thought}}\t'| awk -v FS=$'\t' '{{print ${(get (dict :tags "1" :file-name "2" :title "3" :date "4" :description "5") field)}}}' ]f])
(defn subshell [#* lines]
#[f[({(.join "; " lines)})]f])
(setv thought-tag-format (form->html
`(a (:href "?filter-tag=${tag}") "${tag}")))
(setv thought-tag-list-format
#[f[tags: $(while read -r tag{";"} do echo "{thought-tag-format}"{";"} done <<< "${{tags//;/$'\n'}}")]f])
(setv thought-list-entry-format (form->html
`(div (:id "${file_name}" :class thought-list-entry)
(div (:class title) (a (:href "\\?thought=${file_name}") "${title}"))
(div (:class date) "${date}")
(div (:class description) "${description}")
(div (:class categories) ~#[f[$(echo {thought-tag-list-format})]f]))))
(setv thought-display-meta-format (form->html
`(div (:class thought-meta)
(div (:class date) "${date}")
(div (:class tags) ~#[f[$(echo "{thought-tag-list-format}")]f]))))
(defn thought [[title "empty title"] [description ""] [date "1970-01-01"] [tags []] [content '(p "no content provided")]]
(inherit page-name)
(when (not-in (get page-name -1) (with [thought-registry (open "../data/thought-registry" "r")] (.read thought-registry)))
(with [thought-registry (open "../data/thought-registry" "a")]
(.write thought-registry f"{(.join #[[;]] tags)}\t{(get page-name -1)}\t{title}\t{date}\t{description}\n")))
(run "echo > /tmp/footnote_count")
`(
~content
(br)
~(run "put-footnotes")
~(comments f"/html/thought/view-thought.html?thought={(get page-name -1)}")))
;; (run "echo -n > ../data/thought-registry")
(page
:title f" $[{(param-if-param-else "thought" "natalie thoughts")}] "
:description #[f[
$[{(if-param-then-else "thought"
#[f["$({(get-thought-param-field "description")})"]f]
#[f[$({(if-param-then-else "filter-tag"
"'thoughts filtered for &quot;{filter-tag}&quot;'"
"an enumeration of natalie thoughts. it is functionally a blog")})]f])}]]f]
`(section
(h1 ~#[f[
$[{(if-param-then-else "thought"
#[f[$({(get-thought-param-field "title")})]f]
#[f[$({(if-param-then-else
"filter-tag"
"'thoughts filtered for &quot;{filter-tag}&quot;'"
"natalie thoughts. functionally a blog")})]f])}]]f])
(div (:class ~#[f[$[{(if-param-then-else "thought" "thought" "thought-list")}]]f])
~#[f[$[{(if-param-then-else
"thought"
#[f[{(subshell
#[f[tags=$({(get-thought-param-field "tags")})]f]
#[f[date=$({(get-thought-param-field "date")})]f]
#[f[echo "{thought-display-meta-format}"]f]
#[f[include ./www/site/html/html/thoughts/$({(get-thought-param-field "file_name")}).html]f])}]f]
#[f[cat www/data/thought-registry | eval $({(if-param-then-else
"filter-tag"
#[-[grep '{filter-tag}']-]
#[-["grep -E '.*'"]-])}) | sort -t $'\t' -k4{{,.6,.9}}rn | while IFS=$'\t' read -r tags file_name title date description{";"} do echo "{thought-list-entry-format}"{";"} done]f]
:echo False)}]]f]))))