;; Container-cards fragment handler ;; returns: sx ;; ;; Returns HTML with comment markers so the ;; blog consumer can split per-post fragments. Each post section ;; contains an events-frag-entries-widget with entry cards. (defhandler container-cards (&key post_ids post_slugs) (let ((ids (filter (fn (x) (> x 0)) (map parse-int (filter (fn (s) (not (empty? s))) (split (or post_ids "") ","))))) (slugs (map trim (split (or post_slugs "") ",")))) (when (not (empty? ids)) (let ((batch (service "calendar" "confirmed-entries-for-posts" :post-ids ids))) (<> (map-indexed (fn (i pid) (let ((entries (or (get batch pid) (list))) (post-slug (or (nth slugs i) ""))) (<> (str "") (when (not (empty? entries)) (~fragments/frag-entries-widget :cards (<> (map (fn (e) (let ((time-str (str (format-date (get e "start_at") "%H:%M") (if (get e "end_at") (str " \u2013 " (format-date (get e "end_at") "%H:%M")) "")))) (~fragments/frag-entry-card :href (app-url "events" (str "/" post-slug "/" (get e "calendar_slug") "/" (get e "start_at_year") "/" (get e "start_at_month") "/" (get e "start_at_day") "/entries/" (get e "id") "/")) :name (get e "name") :date-str (format-date (get e "start_at") "%a, %b %d") :time-str time-str))) entries)))) (str "")))) ids))))))