jekyll-cloudinary 1.6.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f72e7653facaf897ebb3b54dfbebbb08dd7382e7
4
- data.tar.gz: 5f826cac5b07094b25965c88a3a9cacb98dfc6b8
3
+ metadata.gz: b39a1223962dd9160274863110e7e2ee8ea81612
4
+ data.tar.gz: 7018c136e38e0fb420e6a030966cc716d326ad71
5
5
  SHA512:
6
- metadata.gz: b4bb1dd01c1efe5efd65ffab49da2e514cbb1956507433d8cccc7a149f4869d89c369c2b79b047fe7e86abb47d4eb5ccd0b97c8c9b2fc4e77e5872faf24a990b
7
- data.tar.gz: a0522ff16af54368f09b8e1ec44454ab5b6ca5c45b1afebe5912b06bd9f846e2b6eab53f4699a66e540c28585a44b81a80217cb0274e9a749a627cb703ff7261
6
+ metadata.gz: 4ff002140b00a547835571eb2b23e092082c697b569fb739ab04b6031e45f5659f1bba7a682833f11c94313f8807f1515edb59a736877aa2149607d0794a5cd7
7
+ data.tar.gz: 6affb3055b891807a74ea205c37b7a9d07e87630ad2d5fbe38064800c0a3b3fd295f1b1fe6f41580555e0ee72ae32bf2d0fb460a2618f3b0e13fefae8bf9c246
@@ -1,5 +1,5 @@
1
1
  module Jekyll
2
2
  module Cloudinary
3
- VERSION = "1.6.0".freeze
3
+ VERSION = "1.7.0".freeze
4
4
  end
5
5
  end
@@ -3,6 +3,7 @@ module Jekyll
3
3
 
4
4
  class CloudinaryTag < Liquid::Tag
5
5
  require "RMagick"
6
+ require "open-uri"
6
7
 
7
8
  def initialize(tag_name, markup, tokens)
8
9
  @markup = markup
@@ -19,7 +20,66 @@ module Jekyll
19
20
  "sizes" => "100vw",
20
21
  "figure" => "auto",
21
22
  "attributes" => {},
22
- "verbose" => false
23
+ "verbose" => false,
24
+ "width_height" => true,
25
+ # Cloudinary transformations
26
+ "height" => false,
27
+ "crop" => "limit",
28
+ "aspect_ratio" => false,
29
+ "gravity" => false,
30
+ "zoom" => false,
31
+ "x" => false,
32
+ "y" => false,
33
+ "format" => false,
34
+ "fetch_format" => "auto",
35
+ "quality" => "auto",
36
+ "radius" => false,
37
+ "angle" => false,
38
+ "effect" => false,
39
+ "opacity" => false,
40
+ "border" => false,
41
+ "background" => false,
42
+ "overlay" => false,
43
+ "underlay" => false,
44
+ "default_image" => false,
45
+ "delay" => false,
46
+ "color" => false,
47
+ "color_space" => false,
48
+ "dpr" => false,
49
+ "page" => false,
50
+ "density" => false,
51
+ "flags" => false,
52
+ "transformation" => false
53
+ }
54
+
55
+ # TODO: Add validation for this parameters
56
+ transformation_options = {
57
+ "height" => "h",
58
+ "crop" => "c", # can include add-on: imagga_scale
59
+ "aspect_ratio" => "ar",
60
+ "gravity" => "g",
61
+ "zoom" => "z",
62
+ "x" => "x",
63
+ "y" => "y",
64
+ "fetch_format" => "f",
65
+ "quality" => "q", # can include add-on: jpegmini
66
+ "radius" => "r",
67
+ "angle" => "a",
68
+ "effect" => "e", # can include add-on: viesus_correct
69
+ "opacity" => "o",
70
+ "border" => "bo",
71
+ "background" => "b",
72
+ "overlay" => "l",
73
+ "underlay" => "u",
74
+ "default_image" => "d",
75
+ "delay" => "dl",
76
+ "color" => "co",
77
+ "color_space" => "cs",
78
+ "dpr" => "dpr",
79
+ "page" => "pg",
80
+ "density" => "dn",
81
+ "flags" => "fl",
82
+ "transformation" => "t"
23
83
  }
24
84
 
25
85
  # Settings
@@ -56,24 +116,40 @@ module Jekyll
56
116
  end
57
117
 
58
118
  image_src = markup[:image_src]
59
-
119
+
120
+ # Dynamic image type
121
+ type = "fetch"
122
+ # TODO: URL2PNG requires signed URLs… need to investigate more
123
+ # if /^url2png\:/.match(image_src)
124
+ # type = "url2png"
125
+ # image_src.gsub! "url2png:", ""
126
+ # end
127
+
60
128
  # Build source image URL
61
- is_image_path_absolute = %r!^/.*$!.match(image_src)
62
- if is_image_path_absolute
63
- image_path = File.join(site.config["destination"], image_src)
64
- image_url = File.join(url, baseurl, image_src)
129
+ is_image_remote = /^https?/.match(image_src)
130
+ # It’s remote
131
+ if is_image_remote
132
+ image_path = image_src
133
+ image_url = image_src
134
+ # It’s local
65
135
  else
66
- image_path = File.join(
67
- site.config["destination"],
68
- File.dirname(context["page"].url),
69
- image_src
70
- )
71
- image_url = File.join(
72
- url,
73
- baseurl,
74
- File.dirname(context["page"].url),
75
- image_src
76
- )
136
+ is_image_path_absolute = %r!^/.*$!.match(image_src)
137
+ if is_image_path_absolute
138
+ image_path = File.join(site.config["destination"], image_src)
139
+ image_url = File.join(url, baseurl, image_src)
140
+ else
141
+ image_path = File.join(
142
+ site.config["destination"],
143
+ File.dirname(context["page"]["url"]),
144
+ image_src
145
+ )
146
+ image_url = File.join(
147
+ url,
148
+ baseurl,
149
+ File.dirname(context["page"]["url"]),
150
+ image_src
151
+ )
152
+ end
77
153
  end
78
154
 
79
155
  if markup[:preset]
@@ -129,22 +205,54 @@ module Jekyll
129
205
 
130
206
  attr_string = html_attr.map { |a, v| "#{a}=\"#{v}\"" }.join(" ")
131
207
 
208
+ # Figure out the Cloudinary transformations
209
+ transformations = []
210
+ transformations_string = ""
211
+ transformation_options.each do | key, shortcode |
212
+ if preset[key]
213
+ transformations << "#{shortcode}_#{preset[key]}"
214
+ end
215
+ end
216
+ if transformations.length > 0
217
+ transformations_string = transformations.compact.reject(&:empty?).join(',') + ","
218
+ end
219
+
132
220
  # Get source image natural width
133
- if File.exist?(image_path)
134
- image = Magick::Image::read(image_path).first
135
- natural_width = image.columns
136
- natural_height = image.rows
137
- width_height = "width=\"#{natural_width}\" height=\"#{natural_height}\""
138
- fallback_url = "https://res.cloudinary.com/#{settings["cloud_name"]}/image/fetch/c_limit,w_#{preset["fallback_max_width"]},q_auto,f_auto/#{image_url}"
139
- else
140
- natural_width = 100_000
221
+ image = false
222
+ fallback_url = "https://res.cloudinary.com/#{settings["cloud_name"]}/image/#{type}/#{transformations_string}w_#{preset["fallback_max_width"]}/#{image_url}"
223
+ natural_width = 100_000
224
+ width_height = ""
225
+ # Standard fetch
226
+ if type == "fetch"
227
+ # Trap format support issues from ImageMagick
228
+ begin
229
+ if is_image_remote
230
+ image = Magick::ImageList.new
231
+ urlimage = open(image_url) # Image Remote URL
232
+ image.from_blob(urlimage.read)
233
+ elsif File.exist?(image_path)
234
+ image = Magick::Image::read(image_path).first
235
+ end
236
+ rescue
237
+ image = false
238
+ end
239
+ if image
240
+ natural_width = image.columns
241
+ natural_height = image.rows
242
+ width_height = "width=\"#{natural_width}\" height=\"#{natural_height}\""
243
+ else
244
+ fallback_url = image_url
245
+ Jekyll.logger.warn(
246
+ "[Cloudinary]",
247
+ "Couldn't find this image to check its width: #{image_path}. \
248
+ Try to run Jekyll build a second time. If it still doesn’t work \
249
+ it could be that your ImageMagick install doesn’t support this format."
250
+ )
251
+ end
252
+ end
253
+
254
+ if preset["width_height"] == false
141
255
  width_height = ""
142
- Jekyll.logger.warn(
143
- "[Cloudinary]",
144
- "Couldn't find this image to check its width: #{image_path}. \
145
- Try to run Jekyll build a second time."
146
- )
147
- fallback_url = image_url
148
256
  end
149
257
 
150
258
  srcset = []
@@ -159,27 +267,27 @@ module Jekyll
159
267
  Jekyll.logger.warn(
160
268
  "[Cloudinary]",
161
269
  "Width of source image '#{File.basename(image_src)}' (#{natural_width}px) \
162
- in #{context["page"].path} not enough for ANY srcset version"
270
+ in #{context["page"]["path"]} not enough for ANY srcset version"
163
271
  )
164
272
  end
165
- srcset << "https://res.cloudinary.com/#{settings["cloud_name"]}/image/fetch/c_limit,w_#{natural_width},q_auto,f_auto/#{image_url} #{natural_width}w"
273
+ srcset << "https://res.cloudinary.com/#{settings["cloud_name"]}/image/#{type}/#{transformations_string}w_#{natural_width}/#{image_url} #{natural_width}w"
166
274
  else
167
275
  missed_sizes = []
168
276
  (1..steps).each do |factor|
169
277
  width = min_width + (factor - 1) * step_width
170
278
  if width <= natural_width
171
- srcset << "https://res.cloudinary.com/#{settings["cloud_name"]}/image/fetch/c_limit,w_#{width},q_auto,f_auto/#{image_url} #{width}w"
279
+ srcset << "https://res.cloudinary.com/#{settings["cloud_name"]}/image/#{type}/#{transformations_string}w_#{width}/#{image_url} #{width}w"
172
280
  else
173
281
  missed_sizes.push(width)
174
282
  end
175
283
  end
176
284
  unless missed_sizes.empty?
177
- srcset << "https://res.cloudinary.com/#{settings["cloud_name"]}/image/fetch/c_limit,w_#{natural_width},q_auto,f_auto/#{image_url} #{natural_width}w"
285
+ srcset << "https://res.cloudinary.com/#{settings["cloud_name"]}/image/#{type}/#{transformations_string}w_#{natural_width}/#{image_url} #{natural_width}w"
178
286
  if settings["verbose"]
179
287
  Jekyll.logger.warn(
180
288
  "[Cloudinary]",
181
289
  "Width of source image '#{File.basename(image_src)}' (#{natural_width}px) \
182
- in #{context["page"].path} not enough for #{missed_sizes.join("px, ")}px \
290
+ in #{context["page"]["path"]} not enough for #{missed_sizes.join("px, ")}px \
183
291
  version#{missed_sizes.length > 1 ? "s" : ""}"
184
292
  )
185
293
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-cloudinary
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nicolas Hoizey
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-03 00:00:00.000000000 Z
11
+ date: 2017-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -126,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
126
  version: '0'
127
127
  requirements: []
128
128
  rubyforge_project:
129
- rubygems_version: 2.6.4
129
+ rubygems_version: 2.6.11
130
130
  signing_key:
131
131
  specification_version: 4
132
132
  summary: Liquid tag for Jekyll with Cloudinary