module Jekyll class GalleryIndex < Page def initialize(site, base, dir, galleries) @site = site @base = base @dir = dir @name = 'index.html' self.process(@name) self.read_yaml(File.join(base, '_layouts'), 'gallery-index.html') self.data['galleries'] = galleries end end class GalleryPage < Page def initialize(site, base, dir, gallery) @site = site @base = base @dir = dir @name = 'index.html' self.process(@name) self.read_yaml(File.join(base, "_layouts"), 'gallery-page.html') self.data['gallery'] = gallery end end class GalleryPhoto < Page def initialize(site, base, dir, photo) @site = site @base = base @dir = dir @name = 'index.html' self.process(@name) self.read_yaml(File.join(base, "_layouts"), 'gallery-photo.html') self.data['photo'] = photo end end class GenerateGalleryIndex < Generator safe true def generate(site) gallery_index = Array.new() @galleries = site.pages.select { |page| page.path =~ /^albums\/(.*)\.yaml$/ } @galleries_sorted = @galleries.sort_by { |g| g['gallery-date'] } @galleries_sorted.reverse.each { |gallery| index_record = Hash.new() index_record['title'] = gallery['gallery-title'] index_record['slug'] = gallery['gallery-slug'] index_record['key'] = gallery['gallery-key'] index_record['date'] = gallery['gallery-date'].strftime("%Y-%m-%d") gallery_index.push(index_record) gallery_page = index_record.clone gallery_page['images'] = gallery['images'].sort_by{|g| g['date']} site.pages << GalleryPage.new(site, site.source, "#{gallery['gallery-slug']}", gallery_page) gallery['images'].each_with_index { |image, i| gallery_photo = index_record.clone gallery_photo['image'] = image site.pages << GalleryPhoto.new(site, site.source, "#{gallery['gallery-slug']}/#{image['basename']}", gallery_photo) } } site.pages << GalleryIndex.new(site, site.source, '', gallery_index) end end end