2015-11-05 09:55:32 +11:00
|
|
|
module Jekyll
|
|
|
|
class ResponsiveImage
|
|
|
|
module Common
|
|
|
|
include Jekyll::ResponsiveImage::Utils
|
|
|
|
|
|
|
|
def make_config(site)
|
2016-09-26 05:23:06 +10:00
|
|
|
ResponsiveImage.defaults.dup
|
|
|
|
.merge(site.config['responsive_image'])
|
|
|
|
.merge(:site_source => site.source, :site_dest => site.dest)
|
|
|
|
end
|
|
|
|
|
|
|
|
def keep_resized_image!(site, image)
|
|
|
|
keep_dir = File.dirname(image['path'])
|
|
|
|
site.config['keep_files'] << keep_dir unless site.config['keep_files'].include?(keep_dir)
|
|
|
|
end
|
|
|
|
|
|
|
|
def render_responsive_image(context, attributes)
|
|
|
|
cache_key = attributes.to_s
|
|
|
|
result = attributes['cache'] ? RenderCache.get(cache_key) : nil
|
|
|
|
|
|
|
|
if result.nil?
|
|
|
|
site = context.registers[:site]
|
|
|
|
config = make_config(site)
|
|
|
|
|
2016-09-26 06:23:47 +10:00
|
|
|
absolute_image_path = site.in_source_dir(attributes['path'].to_s)
|
|
|
|
image = ImageProcessor.process(absolute_image_path, attributes['path'], config)
|
2016-09-26 05:23:06 +10:00
|
|
|
attributes['original'] = image[:original]
|
|
|
|
attributes['resized'] = image[:resized]
|
|
|
|
|
|
|
|
attributes['resized'].each { |resized| keep_resized_image!(site, resized) }
|
|
|
|
|
|
|
|
image_template = site.in_source_dir(attributes['template'] || config['template'])
|
|
|
|
partial = File.read(image_template)
|
|
|
|
template = Liquid::Template.parse(partial)
|
|
|
|
|
|
|
|
result = template.render!(attributes.merge(site.site_payload))
|
2015-11-05 09:55:32 +11:00
|
|
|
|
2015-12-28 09:41:04 +11:00
|
|
|
|
2016-09-26 05:23:06 +10:00
|
|
|
RenderCache.set(cache_key, result)
|
|
|
|
end
|
2015-11-05 09:55:32 +11:00
|
|
|
|
2016-09-26 05:23:06 +10:00
|
|
|
result
|
2015-11-05 09:55:32 +11:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|