blog-2021/_plugins/index_galleries.rb
2016-10-08 17:15:15 -04:00

71 lines
2.6 KiB
Ruby

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,
"/albums/#{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,
"/albums/#{gallery['gallery-slug']}/#{image['basename']}",
gallery_photo)
}
}
site.pages << GalleryIndex.new(site, site.source,
'/albums/', gallery_index)
end
end
end