From 4eebb4462c24de612612d6f4794b1aaaa08dfad4 Mon Sep 17 00:00:00 2001 From: groundh0g Date: Mon, 2 Mar 2015 22:39:10 -0600 Subject: [PATCH] Addresses issue #42. Allows sorting of collections: arrays or hashes, ascending or descending. --- _includes/JB/sort_collection | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 _includes/JB/sort_collection diff --git a/_includes/JB/sort_collection b/_includes/JB/sort_collection new file mode 100644 index 0000000..1e32015 --- /dev/null +++ b/_includes/JB/sort_collection @@ -0,0 +1,81 @@ +{% capture jbcache %}{% comment %} + + Sort the given array or map. + + Parameters: + collection: the array or map to sort [REQUIRED] + sort_by: the property to sort by [OPTIONAL] + sort_descending: reverse the collection [OPTIONAL] + + Returns: + sort_result: the sorted collection + + Examples: +

Pages

+
    + {% include JB/sort_collection collection=site.pages sort_by="title" %} + {% assign pages_list = sort_result %} + {% include JB/pages_list %} +
+ +

Pages [Reversed]

+
    + {% include JB/sort_collection collection=site.pages sort_by="title" sort_descending=true %} + {% assign pages_list = sort_result %} + {% include JB/pages_list %} +
+ +

Array

+
    + {% assign test_array = "one,two,three,four" | split: "," %} + {% include JB/sort_collection collection=test_array %} + {% for test in sort_result %} +
  1. {{test}}
  2. + {% endfor %} +
+ +

Array [Reversed]

+
    + {% assign test_array = "one,two,three,four" | split: "," %} + {% include JB/sort_collection collection=test_array sort_descending=true %} + {% for test in sort_result %} +
  1. {{test}}
  2. + {% endfor %} +
+ +{% endcomment %} + +{% assign is_array = true %} +{% assign sort_result = "," | split: "," %} +{% assign collection = include.collection %} +{% if include.sort_by %} + {% assign sort_by = include.sort_by %} +{% else %} + {% assign sort_by = "title" %} +{% endif %} + +{% if collection and collection.size > 0 %} + {% for x in collection.first %} + {% if x[1].size > 0 %} + {% assign is_array = false %} + {% endif %} + {% break %} + {% endfor %} + + {% if is_array == false %} + {% assign sort_result = collection | sort: sort_by %} + {% else %} + {% assign sort_result = collection | sort %} + {% endif %} + + {% if include.sort_descending %} + {% assign reversed = "," | split: "," %} + {% for index in (1..sort_result.size) %} + {% assign i = sort_result.size | minus: index %} + {% assign reversed = reversed | push: sort_result[i] %} + {% endfor %} + {% assign sort_result = reversed %} + {% assign reversed = nil %} + {% endif %} + +{% endif %}{% endcapture %}{% assign jbcache = nil %} \ No newline at end of file