913fa105c4
I think it's probably better to ship plugins with themes to make it easier to update them. 2. Improved 'install' rake task and made nicer output
50 lines
1.6 KiB
Ruby
50 lines
1.6 KiB
Ruby
##
|
|
## Author: Jose Gonzalez - https://github.com/josegonzalez
|
|
## Source URL: https://github.com/josegonzalez/josediazgonzalez.com/blob/master/_plugins/iterator.rb
|
|
##
|
|
|
|
#module Jekyll
|
|
#class Site
|
|
#alias_method :orig_site_payload, :site_payload
|
|
|
|
## Constuct an array of hashes that will allow the user, using Liquid, to
|
|
## iterate through the keys of _kv_hash_ and be able to iterate through the
|
|
## elements under each key.
|
|
##
|
|
## Example:
|
|
## categories = { 'Ruby' => [<Post>, <Post>] }
|
|
## make_iterable(categories, :index => 'name', :items => 'posts')
|
|
## Will allow the user to iterate through all categories and then iterate
|
|
## though each post in the current category like so:
|
|
## {% for category in site.categories %}
|
|
## h1. {{ category.name }}
|
|
## <ul>
|
|
## {% for post in category.posts %}
|
|
## <li>{{ post.title }}</li>
|
|
## {% endfor %}
|
|
## </ul>
|
|
## {% endfor %}
|
|
##
|
|
## Returns [ {<index> => <kv_hash_key>, <items> => kv_hash[<kv_hash_key>]}, ... ]
|
|
|
|
#def make_iterable(kv_hash, options)
|
|
#options = {:index => 'name', :items => 'items'}.merge(options)
|
|
#result = []
|
|
#kv_hash.sort.each do |key, value|
|
|
#result << { options[:index] => key, options[:items] => value }
|
|
#end
|
|
#result
|
|
#end
|
|
|
|
#def site_payload
|
|
#payload = orig_site_payload
|
|
#payload['site']['iterable'].merge!({
|
|
#'categories' => make_iterable(self.categories, :index => 'name', :items => 'posts'),
|
|
#'tags' => make_iterable(self.tags, :index => 'name', :items => 'posts')
|
|
#})
|
|
#payload
|
|
#end
|
|
|
|
#end
|
|
#end
|