aboutsummaryrefslogtreecommitdiff
path: root/_includes/group-by-array
diff options
context:
space:
mode:
Diffstat (limited to '_includes/group-by-array')
-rw-r--r--_includes/group-by-array47
1 files changed, 47 insertions, 0 deletions
diff --git a/_includes/group-by-array b/_includes/group-by-array
new file mode 100644
index 0000000..708de41
--- /dev/null
+++ b/_includes/group-by-array
@@ -0,0 +1,47 @@
+<!--
+# Jekyll Group-By-Array 0.1.0
+# https://github.com/mushishi78/jekyll-group-by-array
+# © 2015 Max White <mushishi78@gmail.com>
+# MIT License
+-->
+
+<!-- Initialize -->
+{% assign __empty_array = '' | split: ',' %}
+{% assign group_names = __empty_array %}
+{% assign group_items = __empty_array %}
+
+<!-- Map -->
+{% assign __names = include.collection | map: include.field %}
+
+<!-- Flatten -->
+{% assign __names = __names | join: ',' | join: ',' | split: ',' %}
+
+<!-- Uniq -->
+{% assign __names = __names | sort %}
+{% for name in __names %}
+
+<!-- If not equal to previous then it must be unique as sorted -->
+{% unless name == previous %}
+
+<!-- Push to group_names -->
+{% assign group_names = group_names | push: name %}
+{% endunless %}
+
+{% assign previous = name %}
+{% endfor %}
+
+
+<!-- group_items -->
+{% for name in group_names %}
+
+<!-- Collect if contains -->
+{% assign __item = __empty_array %}
+{% for __element in include.collection %}
+{% if __element[include.field] contains name %}
+{% assign __item = __item | push: __element %}
+{% endif %}
+{% endfor %}
+
+<!-- Push to group_items -->
+{% assign group_items = group_items | push: __item %}
+{% endfor %} \ No newline at end of file