;; Extension — multi-document index + tag filtering. (st-bootstrap-classes!) (content/bootstrap!) (content-bootstrap-text!) (define a (doc-with-meta (doc-append (doc-empty "a") (mk-text "p" "first post")) {:title "A" :tags (list "sx" "news")})) (define b (doc-with-meta (doc-append (doc-empty "b") (mk-text "p" "second post")) {:title "B" :tags (list "news")})) (define c (doc-with-meta (doc-append (doc-empty "c") (mk-text "p" "third")) {:title "C" :tags (list "sx")})) (define docs (list a b c)) ;; ── index = list of summaries ── (define idx (content/index docs)) (content-test "index count" (len idx) 3) (content-test "index titles" (map (fn (s) (get s :title)) idx) (list "A" "B" "C")) (content-test "index ids" (map (fn (s) (get s :id)) idx) (list "a" "b" "c")) (content-test "index excerpt" (get (first idx) :excerpt) "first post") ;; ── has-tag? ── (content-test "has-tag yes" (content/has-tag? a "news") true) (content-test "has-tag no" (content/has-tag? c "news") false) ;; ── index-by-tag (category page) ── (content-test "by-tag news" (map (fn (s) (get s :id)) (content/index-by-tag docs "news")) (list "a" "b")) (content-test "by-tag sx" (map (fn (s) (get s :id)) (content/index-by-tag docs "sx")) (list "a" "c")) (content-test "by-tag none" (content/index-by-tag docs "missing") (list)) ;; ── all-tags (tag cloud, deduped, document order) ── (content-test "all-tags" (content/all-tags docs) (list "sx" "news")) (content-test "all-tags empty" (content/all-tags (list)) (list)) (content-test "all-tags untagged" (content/all-tags (list (doc-empty "x"))) (list)) ;; ── empty index ── (content-test "empty index" (content/index (list)) (list))