{% 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:
    <h3>Pages</h3>
    <ol>
      {% include JB/sort_collection collection=site.pages sort_by="title" %}
      {% assign pages_list = sort_result %}
      {% include JB/pages_list %}
    </ol>

    <h3>Pages [Reversed]</h3>
    <ol>
      {% include JB/sort_collection collection=site.pages sort_by="title" sort_descending=true %}
      {% assign pages_list = sort_result %}
      {% include JB/pages_list %}
    </ol>

    <h3>Array</h3>
    <ol>
      {% assign test_array = "one,two,three,four" | split: "," %}
      {% include JB/sort_collection collection=test_array %}
      {% for test in sort_result %}
        <li>{{test}}</li>
      {% endfor %}
    </ol>

    <h3>Array [Reversed]</h3>
    <ol>
      {% assign test_array = "one,two,three,four" | split: "," %}
      {% include JB/sort_collection collection=test_array sort_descending=true %}
      {% for test in sort_result %}
        <li>{{test}}</li>
      {% endfor %}
    </ol>

{% 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 %}