Generate all gallery and photo pages from yaml datafiles
This commit is contained in:
@@ -1,27 +1,104 @@
|
||||
module Jekyll
|
||||
class GalleryPage < Page
|
||||
def initialize(site, gallery, layout)
|
||||
def initialize(site, gallery, name)
|
||||
@site = site
|
||||
@dir = gallery.url
|
||||
@name = layout + '.html'
|
||||
@dir = 'gallery/' + gallery['gallery']
|
||||
@name = name + '.html'
|
||||
self.process(@name)
|
||||
self.read_yaml(File.join(site.source, '_layouts'), 'gallery-' + layout + '.html')
|
||||
self.data.merge!( gallery.data)
|
||||
self.data['gallery'] = gallery.url.split('/')[2]
|
||||
self.data['layout'] = 'gallery-' + layout
|
||||
self.read_yaml(File.join(site.source, '_layouts'), 'gallery-' + name + '.html')
|
||||
self.data.merge!(gallery)
|
||||
end
|
||||
end
|
||||
|
||||
class GalleryPageGenerator < Generator
|
||||
class PhotoPage < Page
|
||||
def initialize(site, gallery, photo)
|
||||
@site = site
|
||||
@dir = 'gallery/' + gallery
|
||||
@name = photo['name'].to_s + '.html'
|
||||
photo['url'] = @dir + '/' + @name
|
||||
self.process(@name)
|
||||
self.read_yaml(File.join(site.source, '_layouts'), 'gallery-photo.html')
|
||||
self.data['gallery'] = gallery
|
||||
self.data['photo'] = photo
|
||||
end
|
||||
end
|
||||
|
||||
class ListPage < Page
|
||||
def initialize(site, galleries)
|
||||
@site = site
|
||||
@dir = 'gallery'
|
||||
@name = 'index.html'
|
||||
self.process(@name)
|
||||
self.read_yaml(File.join(site.source, '_layouts'), 'gallery-list.html')
|
||||
# photo['url'] = @dir + '/' + @name
|
||||
# self.data.merge!(photo)
|
||||
self.data['galleries'] = galleries
|
||||
end
|
||||
end
|
||||
|
||||
class GalleryGenerator < Generator
|
||||
def generate(site)
|
||||
site.collections['gallery'].docs.each do |gallery|
|
||||
# Convert gallery data to array
|
||||
galleries = []
|
||||
site.data['gallery'].each do |gallery|
|
||||
gallery[1]['gallery'] = gallery[0]
|
||||
galleries.push gallery[1]
|
||||
end
|
||||
|
||||
# Sort galleries by date
|
||||
galleries.sort! do |x, y|
|
||||
x['date'] <=> y['date']
|
||||
end
|
||||
galleries.reverse!
|
||||
|
||||
# Process each gallery
|
||||
galleries.each do |gallery|
|
||||
dir = 'gallery/' + gallery['gallery']
|
||||
|
||||
# Convert photo data to array
|
||||
photos = []
|
||||
gallery['photos'].each do |photo|
|
||||
photo[1]['name'] = photo[0]
|
||||
|
||||
# Generate photo page
|
||||
site.pages << PhotoPage.new(site, gallery['gallery'], photo[1])
|
||||
photos.push photo[1]
|
||||
end
|
||||
|
||||
# Sort photos by date
|
||||
photos.sort! do |x, y|
|
||||
x['date'] <=> y['date']
|
||||
end
|
||||
|
||||
# Add previous and next labels
|
||||
photos.each_with_index do |photo, i|
|
||||
if i > 0
|
||||
photo['previous'] = photos[i - 1]['name']
|
||||
end
|
||||
if i < photos.length - 1
|
||||
photo['next'] = photos[i + 1]['name']
|
||||
end
|
||||
end
|
||||
|
||||
# Stored sorted photos in gallery hash
|
||||
gallery['photos'] = photos
|
||||
|
||||
# Generate gallery index page
|
||||
site.pages << GalleryPage.new(site, gallery, 'index')
|
||||
|
||||
# Generate gallery map page
|
||||
if gallery.respond_to?('map')
|
||||
site.pages << GalleryPage.new(site, gallery, 'map')
|
||||
end
|
||||
|
||||
# Generate gallery slideshow page
|
||||
if !gallery.respond_to?('slideshow')
|
||||
site.pages << GalleryPage.new(site, gallery, 'slideshow')
|
||||
end
|
||||
end
|
||||
|
||||
# Generate galleries index page
|
||||
site.pages << ListPage.new(site, galleries)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user