jekyll-responsive-magick 1.2.0 → 1.3.1
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 +4 -4
- data/lib/jekyll-responsive-magick.rb +90 -88
- metadata +8 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7644243da3e80392893e960ee0971166dc0e9e9c42d55514b4165d40a6a63b97
|
4
|
+
data.tar.gz: 13feef7175ada3daafa55fa105a01fc09919efb55f66011ab9f05761e1a1ddb2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 79c1b520803c1ac07dd03fee98846789adbbc4a8fd317c36e3245554ed11ada84626d5b0a9fab1fd75513cca8944be10201bffd1d56e9961444919a3952eadd1
|
7
|
+
data.tar.gz: e9ab7e33e8f4ef47004921f3bd3e1361f24c9757a7fa9fd2e9a385d0efbd7a3629cb776938a64d79cf5fc92eb2c4724644d6254208f1ace34e76567932643edd
|
@@ -42,129 +42,131 @@ module Jekyll
|
|
42
42
|
@@sizes[input] = sizes.split(',', 2).map!(&:to_i)
|
43
43
|
end
|
44
44
|
|
45
|
-
|
46
|
-
|
45
|
+
# Throw error if it is not an absolute path
|
46
|
+
def check_path(input, filter_name)
|
47
47
|
if not input.is_a? String || input.length == 0 || input.chr != '/'
|
48
|
-
throw "
|
48
|
+
throw "#{filter_name}: path must be an absolute path"
|
49
49
|
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Return true if the file exists and is an image mime type
|
53
|
+
def is_image?(src)
|
54
|
+
cmd = "identify -ping #{src.shellescape} 2>&1"
|
55
|
+
output = `#{cmd}`
|
56
|
+
|
57
|
+
if not $?.success?
|
58
|
+
if output.include?("identify: improper image header")
|
59
|
+
throw "file is not an image: '#{src}'"
|
60
|
+
else
|
61
|
+
throw "width/height: failed to execute 'identity', is ImageMagick installed?"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
return true
|
66
|
+
end
|
67
|
+
|
68
|
+
# Convert an image from src to dst with the given width
|
69
|
+
def convert(src, src_extname, dst, width)
|
70
|
+
site = @context.registers[:site]
|
71
|
+
quality = site.config['responsive']['quality'] || 80
|
72
|
+
verbose = site.config['responsive']['verbose'] || false
|
73
|
+
|
74
|
+
if File.exist?(dst) and File.mtime(src) < File.mtime(dst)
|
75
|
+
return
|
76
|
+
end
|
77
|
+
|
78
|
+
FileUtils.mkdir_p(File.dirname(dst))
|
79
|
+
cmd = "convert #{src_extname == '.apng' ? 'apng:' : ''}#{src.shellescape} -strip -quality #{quality} -resize #{width} #{dst.shellescape}"
|
80
|
+
|
81
|
+
if verbose
|
82
|
+
print("#{cmd}\n")
|
83
|
+
end
|
84
|
+
|
85
|
+
if not system(cmd)
|
86
|
+
throw "srcset: failed to execute 'convert', is ImageMagick installed?"
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def srcset(input)
|
91
|
+
check_path(input, "srcset")
|
92
|
+
site = @context.registers[:site]
|
50
93
|
dirname = File.dirname(input)
|
51
94
|
basename = File.basename(input, '.*')
|
52
95
|
extname = File.extname(input)
|
96
|
+
new_extname = site.config['responsive']['format'] ? ".#{site.config['responsive']['format']}" : extname
|
53
97
|
src = ".#{dirname}/#{basename}#{extname}"
|
54
|
-
srcwidth = width(input)
|
98
|
+
srcwidth = width(input, "srcset")
|
55
99
|
srcset = ["#{input} #{srcwidth}w"]
|
56
100
|
|
57
|
-
if File.exist?(src)
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
# as default, use breakpoints of Bootstrap 5
|
63
|
-
widths = [576,768,992,1200,1400]
|
64
|
-
end
|
65
|
-
if site.config['responsive']['quality']
|
66
|
-
quality = site.config['responsive']['quality']
|
67
|
-
else
|
68
|
-
quality = 80
|
69
|
-
end
|
70
|
-
if site.config['responsive']['verbose']
|
71
|
-
verbose = site.config['responsive']['verbose']
|
72
|
-
else
|
73
|
-
verbose = false
|
74
|
-
end
|
101
|
+
if not File.exist?(src) or not is_image?(src)
|
102
|
+
throw "srcset: file does not exist or is not an image: '#{src}'"
|
103
|
+
elsif File.extname(src) != '.svg'
|
104
|
+
# as default, use breakpoints of Bootstrap 5
|
105
|
+
widths = site.config['responsive']['widths'] || [576, 768, 992, 1200, 1400]
|
75
106
|
|
76
107
|
widths.map do |width|
|
77
|
-
if srcwidth > width
|
78
|
-
|
79
|
-
dst = "_responsive#{dirname}/#{file}"
|
80
|
-
if not site.static_files.find{|file| file.path == dst}
|
81
|
-
site.static_files << StaticFile.new(site, "_responsive", dirname, file)
|
82
|
-
if not File.exist?(dst) or File.mtime(src) > File.mtime(dst)
|
83
|
-
FileUtils.mkdir_p(File.dirname(dst))
|
84
|
-
if extname == '.apng'
|
85
|
-
cmd = "convert apng:#{src.shellescape} -strip -quality #{quality} -resize #{width} #{dst.shellescape}"
|
86
|
-
else
|
87
|
-
cmd = "convert #{src.shellescape} -strip -quality #{quality} -resize #{width} #{dst.shellescape}"
|
88
|
-
end
|
89
|
-
if verbose
|
90
|
-
print("#{cmd}\n")
|
91
|
-
end
|
92
|
-
if not system(cmd)
|
93
|
-
throw "srcset: failed to execute 'convert', is ImageMagick installed?"
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
97
|
-
srcset.push("#{dirname}/#{file} #{width}w")
|
108
|
+
if not srcwidth > width
|
109
|
+
next # image is not large enough to generate a smaller version
|
98
110
|
end
|
111
|
+
|
112
|
+
file = "#{basename}-#{width}w#{new_extname}"
|
113
|
+
dst = "_responsive#{dirname}/#{file}"
|
114
|
+
srcset.push("#{dirname}/#{file} #{width}w")
|
115
|
+
|
116
|
+
if site.static_files.find{|file| file.path == dst}
|
117
|
+
next # image is already generated
|
118
|
+
end
|
119
|
+
|
120
|
+
site.static_files << StaticFile.new(site, "_responsive", dirname, file)
|
121
|
+
convert(src, extname, dst, width)
|
99
122
|
end
|
100
123
|
end
|
124
|
+
|
101
125
|
return srcset.join(', ')
|
102
126
|
end
|
103
127
|
|
104
|
-
def width(input)
|
105
|
-
|
106
|
-
throw "width: input must be absolute path"
|
107
|
-
end
|
108
|
-
if not @@sizes[input]
|
109
|
-
identify(input)
|
110
|
-
end
|
128
|
+
def width(input, from = "width")
|
129
|
+
check_size(input, from)
|
111
130
|
return @@sizes[input][0]
|
112
131
|
end
|
113
132
|
|
114
|
-
def height(input)
|
115
|
-
|
116
|
-
|
117
|
-
|
133
|
+
def height(input, from = "height")
|
134
|
+
check_size(input, from)
|
135
|
+
return @@sizes[input][1]
|
136
|
+
end
|
137
|
+
|
138
|
+
def check_size(input, from)
|
139
|
+
check_path(input, from)
|
118
140
|
if not @@sizes[input]
|
119
141
|
identify(input)
|
120
142
|
end
|
121
|
-
return @@sizes[input][1]
|
122
143
|
end
|
123
144
|
|
124
145
|
def size(input, width)
|
146
|
+
check_path(input, "size")
|
125
147
|
site = @context.registers[:site]
|
126
|
-
if not input.is_a? String || input.length == 0 || input.chr != '/'
|
127
|
-
throw "size: input must be absolute path"
|
128
|
-
end
|
129
148
|
dirname = File.dirname(input)
|
130
149
|
basename = File.basename(input, '.*')
|
131
150
|
extname = File.extname(input)
|
151
|
+
new_extname = site.config['responsive']['format'] ? ".#{site.config['responsive']['format']}" : extname
|
132
152
|
src = ".#{dirname}/#{basename}#{extname}"
|
133
153
|
|
134
|
-
if
|
135
|
-
|
136
|
-
else
|
137
|
-
quality = 80
|
138
|
-
end
|
139
|
-
if site.config['responsive']['verbose']
|
140
|
-
verbose = site.config['responsive']['verbose']
|
141
|
-
else
|
142
|
-
verbose = false
|
154
|
+
if not File.exist?(src) or not is_image?(src)
|
155
|
+
throw "srcset: file does not exist or is not an image: '#{src}'"
|
143
156
|
end
|
157
|
+
|
158
|
+
file = "#{basename}-#{width}w#{new_extname}"
|
159
|
+
dst = "_responsive#{dirname}/#{file}"
|
160
|
+
full_path = "#{dirname}/#{file}"
|
144
161
|
|
145
|
-
if
|
146
|
-
|
147
|
-
dst = "_responsive#{dirname}/#{file}"
|
148
|
-
if not site.static_files.find{|file| file.path == dst}
|
149
|
-
site.static_files << StaticFile.new(site, "_responsive", dirname, file)
|
150
|
-
if not File.exist?(dst) or File.mtime(src) > File.mtime(dst)
|
151
|
-
FileUtils.mkdir_p(File.dirname(dst))
|
152
|
-
if extname == '.apng'
|
153
|
-
cmd = "convert apng:#{src.shellescape} -strip -quality #{quality} -resize #{width} #{dst.shellescape}"
|
154
|
-
else
|
155
|
-
cmd = "convert #{src.shellescape} -strip -quality #{quality} -resize #{width} #{dst.shellescape}"
|
156
|
-
end
|
157
|
-
if verbose
|
158
|
-
print("#{cmd}\n")
|
159
|
-
end
|
160
|
-
if not system(cmd)
|
161
|
-
throw "size: failed to execute 'convert', is ImageMagick installed?"
|
162
|
-
end
|
163
|
-
end
|
164
|
-
end
|
162
|
+
if site.static_files.find{|file| file.path == dst}
|
163
|
+
return full_path # image is already generated
|
165
164
|
end
|
166
165
|
|
167
|
-
|
166
|
+
site.static_files << StaticFile.new(site, "_responsive", dirname, file)
|
167
|
+
convert(src, extname, dst, width)
|
168
|
+
|
169
|
+
return full_path
|
168
170
|
end
|
169
171
|
end
|
170
172
|
end
|
metadata
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-responsive-magick
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lawrence Murray
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-03-03 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: A Jekyll plugin for responsive images. Adds filters for setting the srcset,
|
14
14
|
width and height attributes of HTML img elements, while automatically generating
|
15
15
|
image variants of configured sizes using the ImageMagick command-line tools. Resized
|
16
16
|
images are cached to minimize build times, regenerated only when the original source
|
17
|
-
image changes. Supported image file formats
|
18
|
-
and
|
17
|
+
image changes. Supported image file formats include JPEG, PNG, GIF (including animated),
|
18
|
+
APNG and WebP.
|
19
19
|
email: lawrence@indii.org
|
20
20
|
executables: []
|
21
21
|
extensions: []
|
@@ -30,7 +30,7 @@ metadata:
|
|
30
30
|
bug_tracker_uri: https://github.com/lawmurray/jekyll-responsive-magick/issues
|
31
31
|
homepage_uri: https://indii.org/software/jekyll-responsive-magick
|
32
32
|
source_code_uri: https://github.com/lawmurray/jekyll-responsive-magick
|
33
|
-
post_install_message:
|
33
|
+
post_install_message:
|
34
34
|
rdoc_options: []
|
35
35
|
require_paths:
|
36
36
|
- lib
|
@@ -45,8 +45,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '0'
|
47
47
|
requirements: []
|
48
|
-
rubygems_version: 3.3.
|
49
|
-
signing_key:
|
48
|
+
rubygems_version: 3.3.15
|
49
|
+
signing_key:
|
50
50
|
specification_version: 4
|
51
51
|
summary: A Jekyll plugin for responsive images using ImageMagick. Works with Jekyll
|
52
52
|
4.
|