class Jekyll::GalleryPage
Attributes
Public Class Methods
new(site, base, dir, gallery_name)
click to toggle source
# File lib/jekyll-gallery-generator.rb, line 129 def initialize(site, base, dir, gallery_name) @site = site @base = base @dest_dir = dir.gsub("source/", "") @dir = @dest_dir @name = "index.html" @images = [] @hidden = false config = site.config["gallery"] || {} gallery_config = {} max_size_x = 400 max_size_y = 400 symlink = config["symlink"] || false scale_method = config["scale_method"] || "fit" begin max_size_x = config["thumbnail_size"]["x"] rescue Exception end begin max_size_y = config["thumbnail_size"]["y"] rescue Exception end begin gallery_config = config["galleries"][gallery_name] || {} rescue Exception end self.process(@name) gallery_page = File.join(base, "_layouts", "gallery_page.html") unless File.exists?(gallery_page) gallery_page = File.join(File.dirname(__FILE__), "gallery_page.html") end self.read_yaml(File.dirname(gallery_page), File.basename(gallery_page)) self.data["gallery"] = gallery_name gallery_title_prefix = config["title_prefix"] || "Photos: " gallery_name = gallery_name.gsub(/[_-]/, " ").gsub(/\w+/) {|word| word.capitalize} begin gallery_name = gallery_config["name"] || gallery_name rescue Exception end self.data["name"] = gallery_name self.data["title"] = "#{gallery_title_prefix}#{gallery_name}" self.data["exif"] = {} begin @hidden = gallery_config["hidden"] || false rescue Exception end if @hidden self.data["sitemap"] = false end thumbs_dir = File.join(site.dest, @dest_dir, "thumbs") FileUtils.mkdir_p(thumbs_dir, :mode => 0755) date_times = {} entries = Dir.entries(dir) entries.each_with_index do |name, i| next if name.chars.first == "." next unless name.downcase().end_with?(*$image_extensions) image = GalleryImage.new(name, dir) @images.push(image) date_times[name] = image.date_time @site.static_files << GalleryFile.new(site, base, File.join(@dest_dir, "thumbs"), name) if symlink link_src = site.in_source_dir(image.path) link_dest = site.in_dest_dir(image.path) @site.static_files.delete_if {|sf| sf.relative_path == "/" + image.path } @site.static_files << GalleryFile.new(site, base, dir, name) if File.exists?(link_dest) or File.symlink?(link_dest) if not File.symlink?(link_dest) puts "#{link_dest} exists but is not a symlink. Deleting." File.delete(link_dest) elsif File.readlink(link_dest) != link_src puts "#{link_dest} points to the wrong file. Deleting." File.delete(link_dest) end end if not File.exists?(link_dest) and not File.symlink?(link_dest) puts "Symlinking #{link_src} -> #{link_dest}" File.symlink(link_src, link_dest) end end thumb_path = File.join(thumbs_dir, name) if File.file?(thumb_path) == false or File.mtime(image.path) > File.mtime(thumb_path) begin m_image = ImageList.new(image.path) m_image.auto_orient! m_image.send("resize_to_#{scale_method}!", max_size_x, max_size_y) puts "Writing thumbnail to #{thumb_path}" m_image.write(thumb_path) rescue Exception => e printf "Error generating thumbnail for #{image.path}: #{e}\r" puts e.backtrace end if i % 5 == 0 GC.start end end printf "#{gallery_name} #{i+1}/#{entries.length} images\r" end puts "" begin sort_field = gallery_config["sort_field"] || "date_time" if sort_field == "date_time" @images.sort! elsif sort_field == "name" @images.sort! {|a,b| cmp = a.name <=> b.name} else puts "Invalid sort_field for gallery #{gallery_name}: #{sort_field}. Sorting by datetime." @images.sort! end if gallery_config["sort_reverse"] @images.reverse! end rescue Exception => e puts "Error sorting images in gallery #{gallery_name}: #{e}" puts e.backtrace end site.static_files = @site.static_files self.data["images"] = @images best_image = nil if @images.length > 0 best_image = @images[0].name end best_image = gallery_config["best_image"] || best_image self.data["best_image"] = best_image if date_times.has_key?(best_image) gallery_date_time = date_times[best_image] else puts "#{gallery_name}: best_image #{best_image} not found!" gallery_date_time = 0 end self.data["date_time"] = gallery_date_time self.data["info"] = gallery_config["info"] if gallery_config.key?("info") end