jekyll-responsive_image 0.11.0 → 0.11.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e7197c871c2395b35ba1521d0e096e81216b0d9
4
- data.tar.gz: 8677468d6e5251e720703e48bc7dc481034eedec
3
+ metadata.gz: fe2970475b8023f942caa43714d99f99adfbb4a3
4
+ data.tar.gz: ea81c9cc1381b8d8018e87a97243d94e383f094f
5
5
  SHA512:
6
- metadata.gz: 6ac5b13caf07f0da51e9ff6f178f2c0aec17f86524c1df04ec586c9812eaff8203af1b153cd2c40ccb49559442b95ea86cbff51fad4affe54a828ef41ed9ccfb
7
- data.tar.gz: bc3e2951c10dd05d2a224932de713e90f34be9e2f2050c33f69fd0845f612ec60f6008b7dba139cdecdc93a90de99f798b5a97c45bf47fe225624536a7238f3e
6
+ metadata.gz: 08bbd6b9121656bb1c6203ed89e7169fd6b308ce94418875db420ccbcc12cf70d952ea3c77988a4359741774be566c17ab4139ca80f3c512a440fca56fff7b9e
7
+ data.tar.gz: 64a81aecc60593954afece28db05ce753202d14dc6b3400e7440836d84c018e36de5fdec025eaf96fb062d5c5860c68824616a6a4e93c9d21932bcd616e09f5a
data/README.md CHANGED
@@ -62,19 +62,19 @@ responsive_image:
62
62
 
63
63
  Replace your images with the `responsive_image` tag, specifying the path to the image in the `path` attribute.
64
64
 
65
- ```
65
+ ```twig
66
66
  {% responsive_image path: assets/my-file.jpg %}
67
67
  ```
68
68
 
69
69
  You can override the template on a per-image basis by specifying the `template` attribute.
70
70
 
71
- ```
71
+ ```twig
72
72
  {% responsive_image path: assets/my-file.jpg template: _includes/another-template.html %}
73
73
  ```
74
74
 
75
75
  Any extra attributes will be passed straight to the template as variables.
76
76
 
77
- ```
77
+ ```twig
78
78
  {% responsive_image path: assets/image.jpg alt: "Lorem ipsum..." title: "Lorem ipsum..." %}
79
79
  ```
80
80
 
@@ -84,7 +84,7 @@ You can use Liquid variables as attributes with the `responsive_image_block` tag
84
84
 
85
85
  > **Important!** The attributes in the `responsive_image_block` tag are parsed as YAML, so whitespace and indentation are important!
86
86
 
87
- ```
87
+ ```twig
88
88
  {% assign path = 'assets/test.png' %}
89
89
  {% assign alt = 'Lorem ipsum...' %}
90
90
 
@@ -101,21 +101,34 @@ You can use Liquid variables as attributes with the `responsive_image_block` tag
101
101
 
102
102
  You will need to create a template in order to use the `responsive_image` tag. Below are some sample templates to get you started.
103
103
 
104
- #### Basic image tag with `srcset`
104
+ #### Responsive images with `srcset`
105
+
106
+ ```twig
107
+ {% capture srcset %}
108
+ {% for i in resized %}
109
+ /{{ i.path }} {{ i.width }}w,
110
+ {% endfor %}
111
+ {% endcapture %}
112
+
113
+ <img src="/{{ path }}" srcset="{{ srcset | strip_newlines }} /{{ original.path }} {{ original.width }}w">
114
+ ```
115
+
116
+ #### Responsive images with `<picture>`
105
117
 
106
- ```html
107
- <img src="/{{ path }}"
108
- srcset="
109
- {% for i in resized %}/{{ i.path }} {{ i.width }}w,{% endfor %}
110
- /{{ original.path }} {{ original.width }}w
111
- ">
118
+ ```twig
119
+ <picture>
120
+ {% for i in resized %}
121
+ <source media="(min-width: {{ i.width }}px)" srcset="/{{ i.path }}">
122
+ {% endfor %}
123
+ <img src="/{{ path }}">
124
+ </picture>
112
125
  ```
113
126
 
114
127
  #### Responsive images using [Imager.js](https://github.com/BBC-News/Imager.js/)
115
128
 
116
129
  > This template assumes an `output_path_format` of `assets/resized/%{width}/%{basename}`
117
130
 
118
- ```html
131
+ ```twig
119
132
  {% assign smallest = resized | sort: 'width' | first %}
120
133
 
121
134
  <div class="responsive-image">
@@ -38,3 +38,13 @@ Feature: Jekyll responsive_image_block tag
38
38
  """
39
39
  When I run Jekyll
40
40
  Then I should see "<img alt=\"Lorem ipsum\" src=\"/assets/test.png\"" in "_site/index.html"
41
+
42
+ Scenario: Handling a nil path
43
+ Given I have a responsive_image configuration with "template" set to "_includes/responsive-image.html"
44
+ And I have a file "index.html" with:
45
+ """
46
+ {% responsive_image_block %}
47
+ path: {{ path }}
48
+ {% endresponsive_image_block %}
49
+ """
50
+ Then Jekyll should throw a "SyntaxError"
@@ -1,7 +1,13 @@
1
+ include Test::Unit::Assertions
2
+
1
3
  When /^I run Jekyll$/ do
2
4
  run_jekyll
3
5
  end
4
6
 
7
+ Then /^Jekyll should throw a "(.+)"$/ do |error_class|
8
+ assert_raise(Object.const_get(error_class)) { run_jekyll }
9
+ end
10
+
5
11
  Given /^I have a responsive_image configuration with:$/ do |config|
6
12
  write_file('_config.yml', "responsive_image:\n#{config}")
7
13
  end
@@ -8,10 +8,9 @@ module Jekyll
8
8
  attributes = YAML.load(super)
9
9
  image_template = attributes['template'] || config['template']
10
10
 
11
- resize_handler = ResizeHandler.new
12
- img = Magick::Image::read(attributes['path']).first
13
- attributes['original'] = Utils.image_hash(attributes['path'], img.columns, img.rows)
14
- attributes['resized'] = resize_handler.resize_image(img, config)
11
+ image = ImageProcessor.process(attributes['path'], config)
12
+ attributes['original'] = image[:original]
13
+ attributes['resized'] = image[:resized]
15
14
 
16
15
  partial = File.read(image_template)
17
16
  template = Liquid::Template.parse(partial)
@@ -0,0 +1,23 @@
1
+ module Jekyll
2
+ class ResponsiveImage
3
+ class ImageProcessor
4
+ include ResponsiveImage::Utils
5
+
6
+ def process(image_path, config)
7
+ raise SyntaxError.new('Invalid image path specified') unless File.exists?(image_path.to_s)
8
+
9
+ resize_handler = ResizeHandler.new
10
+ img = Magick::Image::read(image_path).first
11
+
12
+ {
13
+ original: image_hash(image_path, img.columns, img.rows),
14
+ resized: resize_handler.resize_image(img, config),
15
+ }
16
+ end
17
+
18
+ def self.process(image_path, config)
19
+ self.new.process(image_path, config)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -1,6 +1,8 @@
1
1
  module Jekyll
2
2
  class ResponsiveImage
3
3
  class ResizeHandler
4
+ include ResponsiveImage::Utils
5
+
4
6
  def resize_image(img, config)
5
7
  resized = []
6
8
 
@@ -12,7 +14,7 @@ module Jekyll
12
14
  next unless needs_resizing?(img, width)
13
15
 
14
16
  filepath = format_output_path(config['output_path_format'], img.filename, width, height)
15
- resized.push(Utils.image_hash(filepath, width, height))
17
+ resized.push(image_hash(filepath, width, height))
16
18
 
17
19
  # Don't resize images more than once
18
20
  next if File.exists?(filepath)
@@ -33,7 +35,7 @@ module Jekyll
33
35
  end
34
36
 
35
37
  def format_output_path(format, path, width, height)
36
- params = Utils.symbolize_keys(Utils.image_hash(path, width, height))
38
+ params = symbolize_keys(image_hash(path, width, height))
37
39
  format % params
38
40
  end
39
41
 
@@ -16,10 +16,9 @@ module Jekyll
16
16
  config = ResponsiveImage.defaults.dup
17
17
  config.merge!(context.registers[:site].config['responsive_image'])
18
18
 
19
- resize_handler = ResizeHandler.new
20
- img = Magick::Image::read(@attributes['path']).first
21
- @attributes['original'] = Utils.image_hash(@attributes['path'], img.columns, img.rows)
22
- @attributes['resized'] = resize_handler.resize_image(img, config)
19
+ image = ImageProcessor.process(@attributes['path'], config)
20
+ @attributes['original'] = image[:original]
21
+ @attributes['resized'] = image[:resized]
23
22
 
24
23
  image_template = @attributes['template'] || config['template']
25
24
 
@@ -1,7 +1,7 @@
1
1
  module Jekyll
2
2
  class ResponsiveImage
3
- class Utils
4
- def self.symbolize_keys(hash)
3
+ module Utils
4
+ def symbolize_keys(hash)
5
5
  result = {}
6
6
  hash.each_key do |key|
7
7
  result[key.to_sym] = hash[key]
@@ -10,7 +10,7 @@ module Jekyll
10
10
  end
11
11
 
12
12
  # Build a hash containing image information
13
- def self.image_hash(path, width, height)
13
+ def image_hash(path, width, height)
14
14
  {
15
15
  'path' => path,
16
16
  'basename' => File.basename(path),
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  class ResponsiveImage
3
- VERSION = '0.11.0'.freeze
3
+ VERSION = '0.11.1'.freeze
4
4
  end
5
5
  end
@@ -7,6 +7,7 @@ require 'rmagick'
7
7
  require 'jekyll/responsive_image/version'
8
8
  require 'jekyll/responsive_image/defaults'
9
9
  require 'jekyll/responsive_image/utils'
10
+ require 'jekyll/responsive_image/image_processor'
10
11
  require 'jekyll/responsive_image/resize_handler'
11
12
  require 'jekyll/responsive_image/tag'
12
13
  require 'jekyll/responsive_image/block'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-responsive_image
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.11.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Wynn
@@ -58,7 +58,7 @@ files:
58
58
  - features/fixtures/_includes/responsive-image.html
59
59
  - features/fixtures/assets/test.png
60
60
  - features/responsive-image-block.feature
61
- - features/responsive-image.feature
61
+ - features/responsive-image-tag.feature
62
62
  - features/step_definitions/jekyll_steps.rb
63
63
  - features/support/env.rb
64
64
  - features/support/hooks.rb
@@ -67,6 +67,7 @@ files:
67
67
  - lib/jekyll/responsive_image.rb
68
68
  - lib/jekyll/responsive_image/block.rb
69
69
  - lib/jekyll/responsive_image/defaults.rb
70
+ - lib/jekyll/responsive_image/image_processor.rb
70
71
  - lib/jekyll/responsive_image/resize_handler.rb
71
72
  - lib/jekyll/responsive_image/tag.rb
72
73
  - lib/jekyll/responsive_image/utils.rb