Generate all gallery and photo pages from yaml datafiles

This commit is contained in:
2016-01-26 15:02:42 +00:00
parent 3a0d77208f
commit d020903123
1367 changed files with 14792 additions and 32293 deletions

View File

@@ -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