diff --git a/README.md b/README.md index e1f9a8a..a402725 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,8 @@ responsive_image: quality: 90 # [Optional, Default: assets/resized/%{filename}-%{width}x%{height}.%{extension}] - # The template used when generating filenames for resized images. + # The template used when generating filenames for resized images. Must be a + # relative path. # # Parameters available are: # %{basename} Basename of the file (assets/some-file.jpg => some-file.jpg) diff --git a/lib/jekyll/responsive_image.rb b/lib/jekyll/responsive_image.rb index 5571de1..6d0dcf5 100644 --- a/lib/jekyll/responsive_image.rb +++ b/lib/jekyll/responsive_image.rb @@ -9,6 +9,7 @@ require 'jekyll/responsive_image/defaults' require 'jekyll/responsive_image/utils' require 'jekyll/responsive_image/image_processor' require 'jekyll/responsive_image/resize_handler' +require 'jekyll/responsive_image/common' require 'jekyll/responsive_image/tag' require 'jekyll/responsive_image/block' diff --git a/lib/jekyll/responsive_image/block.rb b/lib/jekyll/responsive_image/block.rb index f629bc2..8df1900 100644 --- a/lib/jekyll/responsive_image/block.rb +++ b/lib/jekyll/responsive_image/block.rb @@ -1,9 +1,10 @@ module Jekyll class ResponsiveImage class Block < Liquid::Block + include Jekyll::ResponsiveImage::Common + def render(context) - config = ResponsiveImage.defaults.dup - config.merge!(context.registers[:site].config['responsive_image']) + config = make_config(context.registers[:site]) attributes = YAML.load(super) image_template = attributes['template'] || config['template'] diff --git a/lib/jekyll/responsive_image/common.rb b/lib/jekyll/responsive_image/common.rb new file mode 100644 index 0000000..d018fa9 --- /dev/null +++ b/lib/jekyll/responsive_image/common.rb @@ -0,0 +1,17 @@ +module Jekyll + class ResponsiveImage + module Common + include Jekyll::ResponsiveImage::Utils + + def make_config(site) + config = ResponsiveImage.defaults.dup.merge(site.config['responsive_image']).merge(:site_dest => site.dest) + + # Not very nice, but this is needed to create a clean path to add to keep_files + output_dir = format_output_path(config['output_path_format'], '*', '*', '*') + site.config['keep_files'] << output_dir unless site.config['keep_files'].include?(output_dir) + + config + end + end + end +end diff --git a/lib/jekyll/responsive_image/resize_handler.rb b/lib/jekyll/responsive_image/resize_handler.rb index 263ab3a..68f5de3 100644 --- a/lib/jekyll/responsive_image/resize_handler.rb +++ b/lib/jekyll/responsive_image/resize_handler.rb @@ -28,17 +28,17 @@ module Jekyll f.quality = size['quality'] || config['default_quality'] end + # Ensure the generated file is copied to the _site directory + site_dest_filepath = File.expand_path(filepath, config[:site_dest]) + ensure_output_dir_exists!(File.dirname(site_dest_filepath)) + FileUtils.copy(filepath, site_dest_filepath) + i.destroy! end resized end - def format_output_path(format, path, width, height) - params = symbolize_keys(image_hash(path, width, height)) - format % params - end - def needs_resizing?(img, width) img.columns > width end diff --git a/lib/jekyll/responsive_image/tag.rb b/lib/jekyll/responsive_image/tag.rb index ac8bade..0a216cf 100644 --- a/lib/jekyll/responsive_image/tag.rb +++ b/lib/jekyll/responsive_image/tag.rb @@ -1,6 +1,8 @@ module Jekyll class ResponsiveImage class Tag < Liquid::Tag + include Jekyll::ResponsiveImage::Common + def initialize(tag_name, markup, tokens) super @@ -13,8 +15,7 @@ module Jekyll end def render(context) - config = ResponsiveImage.defaults.dup - config.merge!(context.registers[:site].config['responsive_image']) + config = make_config(context.registers[:site]) image = ImageProcessor.process(@attributes['path'], config) @attributes['original'] = image[:original] diff --git a/lib/jekyll/responsive_image/utils.rb b/lib/jekyll/responsive_image/utils.rb index 425c30c..bceb0de 100644 --- a/lib/jekyll/responsive_image/utils.rb +++ b/lib/jekyll/responsive_image/utils.rb @@ -9,6 +9,11 @@ module Jekyll result end + def format_output_path(format, path, width, height) + params = symbolize_keys(image_hash(path, width, height)) + format % params + end + # Build a hash containing image information def image_hash(path, width, height) {