jekyll-responsive_image 0.13.0 → 0.14.0

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: 8222a5289fe9566ef0395c25a7491215e9fd3f55
4
- data.tar.gz: 2648869efed1723fb8b6b209e62b878dec1bb406
3
+ metadata.gz: 26a3868d77490e6edcf5c932cffb129cf05cdab6
4
+ data.tar.gz: d3b7bcc0c173b2938cf7486dd45967a5a0978f9a
5
5
  SHA512:
6
- metadata.gz: 04aab057ea359cd2c98365acb89dbae99042d1a74c95cf0e992b201f426ecee00f33d33adb0d1bc4736aff81a716520de28a390b22182c201f525e7292768817
7
- data.tar.gz: 36a5d066c75ef897cdb4ccbea51932211e37ef6dc379a612ac16584bdb2da08422b6eff7136ad2a5435a9e0ed58a09f95f003f9bcf1d211d35b4f6986d9c1cd9
6
+ metadata.gz: 195fda571ae489df9febc69e482b4b7ae4b3d1cc65289d4c97f70c5e2bcfe43c850cc921d94f21e1c2fd4c53d22970820ddba3586ab346e6c0268a14853e2500
7
+ data.tar.gz: 6f4ef84402e49e4e0f2b2278aef28d97ccebfb9f7b7e484ea9f522e67c3b49e84385dde8e6c5ce31a804fbd63f1c4afd166aa2517b54f3335bbd81b4f2c5e3d5
data/.travis.yml CHANGED
@@ -1,9 +1,11 @@
1
+ sudo: false
1
2
  language: ruby
2
3
  bundler_args: --without debug
4
+ before_script: bundle exec jekyll --version
3
5
  script: bundle exec rake features_with_coveralls
4
6
  rvm:
5
- - 2.2.0
6
- - 2.1.0
7
- - 2.0.0
8
- - 1.9.3
9
- - rbx-2
7
+ - 2.2
8
+ - 2.1
9
+ - 2.0
10
+ - 1.9
11
+ - rbx
data/README.md CHANGED
@@ -45,11 +45,17 @@ responsive_image:
45
45
  - width: 1400
46
46
  quality: 90
47
47
 
48
+ # [Optional, Default: assets]
49
+ # The base directory where assets are stored. This is used to determine the
50
+ # `dirname` value in `output_path_format` below.
51
+ base_path: assets
52
+
48
53
  # [Optional, Default: assets/resized/%{filename}-%{width}x%{height}.%{extension}]
49
54
  # The template used when generating filenames for resized images. Must be a
50
55
  # relative path.
51
56
  #
52
57
  # Parameters available are:
58
+ # %{dirname} Directory of the file relative to `base_path` (assets/sub/dir/some-file.jpg => sub/dir)
53
59
  # %{basename} Basename of the file (assets/some-file.jpg => some-file.jpg)
54
60
  # %{filename} Basename without the extension (assets/some-file.jpg => some-file)
55
61
  # %{extension} Extension of the file (assets/some-file.jpg => jpg)
@@ -83,7 +89,7 @@ Any extra attributes will be passed straight to the template as variables.
83
89
 
84
90
  You can use Liquid variables as attributes with the `responsive_image_block` tag. This tag works in exactly the same way as the `responsive_image` tag, but is implemented as a block tag to allow for more complex logic.
85
91
 
86
- > **Important!** The attributes in the `responsive_image_block` tag are parsed as YAML, so whitespace and indentation are important!
92
+ > **Important!** The attributes in the `responsive_image_block` tag are parsed as YAML, so whitespace and indentation are significant!
87
93
 
88
94
  ```twig
89
95
  {% assign path = 'assets/test.png' %}
@@ -127,7 +133,7 @@ You will need to create a template in order to use the `responsive_image` tag. B
127
133
 
128
134
  #### Responsive images using [Imager.js](https://github.com/BBC-News/Imager.js/)
129
135
 
130
- > This template assumes an `output_path_format` of `assets/resized/%{width}/%{basename}`
136
+ > **Note:** This template assumes an `output_path_format` of `assets/resized/%{width}/%{basename}`
131
137
 
132
138
  ```twig
133
139
  {% assign smallest = resized | sort: 'width' | first %}
@@ -162,11 +168,12 @@ The following variables are available in the template:
162
168
 
163
169
  Image objects (like `original` and each object in `resized`) contain the following properties:
164
170
 
165
- | Variable | Type | Description |
166
- |-------------|---------|-------------------------------------------------------------------------|
167
- | `path` | String | The path to the image. |
168
- | `width` | Integer | The width of the image. |
169
- | `height` | Integer | The height of the image. |
170
- | `basename` | String | Basename of the file (`assets/some-file.jpg` => `some-file.jpg`). |
171
- | `filename` | String | Basename without the extension (`assets/some-file.jpg` => `some-file`). |
172
- | `extension` | String | Extension of the file (`assets/some-file.jpg` => `jpg`). |
171
+ | Variable | Type | Description |
172
+ |-------------|---------|----------------------------------------------------------------------------------------------|
173
+ | `path` | String | The path to the image. |
174
+ | `width` | Integer | The width of the image. |
175
+ | `height` | Integer | The height of the image. |
176
+ | `basename` | String | Basename of the file (`assets/some-file.jpg` => `some-file.jpg`). |
177
+ | `dirname` | String | Directory of the file relative to `base_path` (`assets/sub/dir/some-file.jpg` => `sub/dir`). |
178
+ | `filename` | String | Basename without the extension (`assets/some-file.jpg` => `some-file`). |
179
+ | `extension` | String | Extension of the file (`assets/some-file.jpg` => `jpg`). |
@@ -0,0 +1,35 @@
1
+ Feature: Responsive image generation
2
+ As a Jekyll user
3
+ I want to generate responsive images
4
+ In order to use them on my pages
5
+
6
+ Scenario: Resizing images
7
+ Given I have a responsive_image configuration with:
8
+ """
9
+ template: _includes/responsive-image.html
10
+ sizes:
11
+ - width: 100
12
+ """
13
+
14
+ And I have a file "index.html" with "{% responsive_image path: assets/test.png alt: Foobar %}"
15
+ When I run Jekyll
16
+ Then the image "assets/resized/test-100x50.png" should have the dimensions "100x50"
17
+
18
+ Scenario: Handling subdirectories
19
+ Given I have a responsive_image configuration with:
20
+ """
21
+ template: _includes/responsive-image.html
22
+ output_path_format: assets/resized/%{dirname}/%{filename}-%{width}.%{extension}
23
+ sizes:
24
+ - width: 100
25
+ """
26
+
27
+ And I have a file "index.html" with:
28
+ """
29
+ {% responsive_image path: assets/test.png %}
30
+ {% responsive_image path: assets/subdir/test.png %}
31
+ """
32
+
33
+ When I run Jekyll
34
+ Then the file "assets/resized/test-100.png" should exist
35
+ And the file "assets/resized/subdir/test-100.png" should exist
@@ -69,7 +69,7 @@ Feature: Jekyll responsive_image tag
69
69
  Given I have a responsive_image configuration with:
70
70
  """
71
71
  template: _includes/responsive-image.html
72
- output_path_format: assets/%{basename}-resized/%{width}/%{filename}-%{height}.%{extension}
72
+ output_path_format: assets/%{dirname}/%{basename}-resized/%{width}/%{filename}-%{height}.%{extension}
73
73
  sizes:
74
74
  - width: 100
75
75
  """
@@ -36,6 +36,12 @@ Then /^the file "(.+)" should exist$/ do |path|
36
36
  assert File.exists?(path)
37
37
  end
38
38
 
39
+ Then /^the image "(.+)" should have the dimensions "(\d+)x(\d+)"$/ do |path, width, height|
40
+ img = Magick::Image::read(path).first
41
+ assert_equal "#{width}x#{height}", "#{img.columns}x#{img.rows}"
42
+ img.destroy!
43
+ end
44
+
39
45
  def write_file(path, contents)
40
46
  File.open(path, 'w') do |f|
41
47
  f.write(contents)
@@ -29,5 +29,5 @@ Gem::Specification.new do |spec|
29
29
  end
30
30
 
31
31
  spec.add_runtime_dependency 'jekyll', ['>= 2.0', "< #{max_jekyll_version}"]
32
- spec.add_runtime_dependency 'rmagick'
32
+ spec.add_runtime_dependency 'rmagick', ['>= 2.0', '< 3.0']
33
33
  end
@@ -7,7 +7,9 @@ module Jekyll
7
7
  config = ResponsiveImage.defaults.dup.merge(site.config['responsive_image']).merge(:site_dest => site.dest)
8
8
 
9
9
  # Not very nice, but this is needed to create a clean path to add to keep_files
10
- output_dir = format_output_path(config['output_path_format'], '*', '*', '*')
10
+ output_dir = format_output_path(config['output_path_format'], config['base_path'], '*', '*', '*')
11
+ output_dir = "#{File.dirname(output_dir)}/*"
12
+
11
13
  site.config['keep_files'] << output_dir unless site.config['keep_files'].include?(output_dir)
12
14
 
13
15
  config
@@ -2,6 +2,7 @@ module Jekyll
2
2
  class ResponsiveImage
3
3
  @defaults = {
4
4
  'default_quality' => 85,
5
+ 'base_path' => 'assets',
5
6
  'output_path_format' => 'assets/resized/%{filename}-%{width}x%{height}.%{extension}',
6
7
  'sizes' => [],
7
8
  }.freeze
@@ -10,7 +10,7 @@ module Jekyll
10
10
  img = Magick::Image::read(image_path).first
11
11
 
12
12
  {
13
- original: image_hash(image_path, img.columns, img.rows),
13
+ original: image_hash(config['base_path'], image_path, img.columns, img.rows),
14
14
  resized: resize_handler.resize_image(img, config),
15
15
  }
16
16
  end
@@ -13,8 +13,8 @@ module Jekyll
13
13
 
14
14
  next unless needs_resizing?(img, width)
15
15
 
16
- filepath = format_output_path(config['output_path_format'], img.filename, width, height)
17
- resized.push(image_hash(filepath, width, height))
16
+ filepath = format_output_path(config['output_path_format'], config['base_path'], img.filename, width, height)
17
+ resized.push(image_hash(config['base_path'], filepath, width, height))
18
18
 
19
19
  # Don't resize images more than once
20
20
  next if File.exists?(filepath)
@@ -1,3 +1,5 @@
1
+ require 'pathname'
2
+
1
3
  module Jekyll
2
4
  class ResponsiveImage
3
5
  module Utils
@@ -9,22 +11,31 @@ module Jekyll
9
11
  result
10
12
  end
11
13
 
12
- def format_output_path(format, path, width, height)
13
- params = symbolize_keys(image_hash(path, width, height))
14
- format % params
14
+ def format_output_path(format, base_path, image_path, width, height)
15
+ params = symbolize_keys(image_hash(base_path, image_path, width, height))
16
+
17
+ Pathname.new(format % params).cleanpath.to_s
15
18
  end
16
19
 
17
20
  # Build a hash containing image information
18
- def image_hash(path, width, height)
21
+ def image_hash(base_path, image_path, width, height)
19
22
  {
20
- 'path' => path,
21
- 'basename' => File.basename(path),
22
- 'filename' => File.basename(path, '.*'),
23
- 'extension' => File.extname(path).delete('.'),
23
+ 'path' => image_path,
24
+ 'dirname' => relative_dirname(base_path, image_path),
25
+ 'basename' => File.basename(image_path),
26
+ 'filename' => File.basename(image_path, '.*'),
27
+ 'extension' => File.extname(image_path).delete('.'),
24
28
  'width' => width,
25
29
  'height' => height,
26
30
  }
27
31
  end
32
+
33
+ def relative_dirname(base_path, image_path)
34
+ path = Pathname.new(image_path).expand_path
35
+ base = Pathname.new(base_path).expand_path
36
+
37
+ path.relative_path_from(base).dirname.to_s.delete('.')
38
+ end
28
39
  end
29
40
  end
30
41
  end
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  class ResponsiveImage
3
- VERSION = '0.13.0'.freeze
3
+ VERSION = '0.14.0'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-responsive_image
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Wynn
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-05 00:00:00.000000000 Z
11
+ date: 2016-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -36,14 +36,20 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '0'
39
+ version: '2.0'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '3.0'
40
43
  type: :runtime
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
47
  - - ">="
45
48
  - !ruby/object:Gem::Version
46
- version: '0'
49
+ version: '2.0'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
47
53
  description: "\n Jekyll Responsive Images is a Jekyll plugin and utility for automatically
48
54
  resizing images.\n Its intended use is for sites which want to display responsive
49
55
  images using something like srcset or Imager.js.\n "
@@ -63,7 +69,9 @@ files:
63
69
  - features/fixtures/_includes/base-url.html
64
70
  - features/fixtures/_includes/custom-template.html
65
71
  - features/fixtures/_includes/responsive-image.html
72
+ - features/fixtures/assets/subdir/test.png
66
73
  - features/fixtures/assets/test.png
74
+ - features/image-generation.feature
67
75
  - features/responsive-image-block.feature
68
76
  - features/responsive-image-tag.feature
69
77
  - features/step_definitions/jekyll_steps.rb
@@ -107,7 +115,9 @@ test_files:
107
115
  - features/fixtures/_includes/base-url.html
108
116
  - features/fixtures/_includes/custom-template.html
109
117
  - features/fixtures/_includes/responsive-image.html
118
+ - features/fixtures/assets/subdir/test.png
110
119
  - features/fixtures/assets/test.png
120
+ - features/image-generation.feature
111
121
  - features/responsive-image-block.feature
112
122
  - features/responsive-image-tag.feature
113
123
  - features/step_definitions/jekyll_steps.rb