Ooof. Looking at your soln, I see that I was so focused on re-ordering 
those `[:tr ..]`'s that I didn't realize I should first sort the source 
data I start with *before* converting it to hiccup data structures.

Thanks!

-- John



On Friday, February 24, 2017 at 6:11:19 PM UTC-5, James Reeves wrote:
>
> Generally you'd approach the problem by using an intermediate structure. 
> For example:
>
>   (def data
>     {:headers [:color :size]
>      :rows    [{:color "blue",  :size 4}
>                {:color "red",   :size 2}
>                {:color "green", :size 7}])
>
> Then you could build a function that translates this data structure into a 
> Hiccup table:
>
>   (defn ->table [{:keys [headers rows]}]
>     [:table
>      [:tr (for [h headers] [:th (str/capitalize h)])]
>      (for [row rows]
>        [:tr (for [h headers, :let [v (row h)] [:td h])])])
>
> Then you could write something like:
>
>   (->table (update data :rows (partial sort-by :color))
>
> - James
>
> On 24 February 2017 at 22:41, John Gabriele <jmg...@gmail.com 
> <javascript:>> wrote:
>
>> I'm using hiccup, and I'd like to build a table, but then have the option 
>> to re-order it (sort its rows by a column of my choosing). I want a 
>> `sort-table-by` function.
>>
>> That is, if I've got
>>
>>
>> Color   Size
>> ------  ----
>> red     2
>> green   7
>> blue    4
>>
>>
>> (or, as a data structure: `(def tbl [:table [:tr [:th "Color"] [:th 
>> "Size"]] [:tr [:td "red"] [:td 2]] [:tr [:td "green"] [:td 7]] [:tr [:td 
>> "blue"] [:td 4]]])`)
>>
>> I'd like to be able to do `(sort-table-by tbl 0)` and get
>>
>>
>> Color   Size
>> ------  ----
>> blue    4
>> green   7
>> red     2
>>
>>
>> or `(sort-table-by tbl 1)` and get
>>
>>
>> Color   Size
>> ------  ----
>> red     2
>> blue    4
>> green   7
>>
>>
>> Where it gets tricky though is when your table has various attribute maps 
>> in it, and also when some of the values you're sorting on may be links.
>>
>> A first try at a solution yields ... oh man, {sigh, deep breath} this, 
>> which doesn't work:
>> <https://gist.github.com/uvtc/ca819f08fe7ead81e13055f001a994e3>.
>>
>> Thanks!
>> -- John
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com 
>> <javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/clojure?hl=en
>> --- 
>> You received this message because you are subscribed to the Google Groups 
>> "Clojure" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to clojure+u...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to