jekyll-responsive_image 1.0.0.pre3 → 1.0.0.pre4
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_image.rb +2 -2
- data/lib/jekyll/responsive_image/block.rb +3 -12
- data/lib/jekyll/responsive_image/config.rb +22 -0
- data/lib/jekyll/responsive_image/extra_image_generator.rb +7 -5
- data/lib/jekyll/responsive_image/image_processor.rb +8 -6
- data/lib/jekyll/responsive_image/render_cache.rb +1 -1
- data/lib/jekyll/responsive_image/renderer.rb +37 -0
- data/lib/jekyll/responsive_image/resize_handler.rb +16 -7
- data/lib/jekyll/responsive_image/tag.rb +2 -4
- data/lib/jekyll/responsive_image/utils.rb +11 -12
- data/lib/jekyll/responsive_image/version.rb +2 -2
- metadata +5 -5
- data/lib/jekyll/responsive_image/common.rb +0 -46
- data/lib/jekyll/responsive_image/defaults.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 52e6d96f085c965ad79ac57cf56ab3a40e32f21b
|
4
|
+
data.tar.gz: 26b46156c6e64631f955ea31f5f045ce5a95c03f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9e2617adb6db1e71a830c7e37a4721ab98f4c15815d192ee097737ebf78255ac1bb0fbb725550fbcd00dc78a7f7e67b668eb45053c0e92ba32b78131565349c7
|
7
|
+
data.tar.gz: ff8ea68c0724566e0adbe4dac3dc82c8dd7cdcd9e980e89f6c5bc32cf518b4d5899ef135db70ec861f122b79d6f8d9537e1f001063f084cc3fdd4afad0be792e
|
@@ -5,12 +5,12 @@ require 'jekyll'
|
|
5
5
|
require 'rmagick'
|
6
6
|
|
7
7
|
require 'jekyll/responsive_image/version'
|
8
|
-
require 'jekyll/responsive_image/
|
8
|
+
require 'jekyll/responsive_image/config'
|
9
9
|
require 'jekyll/responsive_image/utils'
|
10
10
|
require 'jekyll/responsive_image/render_cache'
|
11
11
|
require 'jekyll/responsive_image/image_processor'
|
12
12
|
require 'jekyll/responsive_image/resize_handler'
|
13
|
-
require 'jekyll/responsive_image/
|
13
|
+
require 'jekyll/responsive_image/renderer'
|
14
14
|
require 'jekyll/responsive_image/tag'
|
15
15
|
require 'jekyll/responsive_image/block'
|
16
16
|
require 'jekyll/responsive_image/extra_image_generator'
|
@@ -1,20 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
1
|
module Jekyll
|
11
|
-
|
2
|
+
module ResponsiveImage
|
12
3
|
class Block < Liquid::Block
|
13
|
-
include Jekyll::ResponsiveImage::
|
4
|
+
include Jekyll::ResponsiveImage::Utils
|
14
5
|
|
15
6
|
def render(context)
|
16
7
|
attributes = YAML.load(super)
|
17
|
-
|
8
|
+
Renderer.new(context.registers[:site], attributes).render_responsive_image
|
18
9
|
end
|
19
10
|
end
|
20
11
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module ResponsiveImage
|
3
|
+
class Config
|
4
|
+
DEFAULTS = {
|
5
|
+
'default_quality' => 85,
|
6
|
+
'base_path' => 'assets',
|
7
|
+
'output_path_format' => 'assets/resized/%{filename}-%{width}x%{height}.%{extension}',
|
8
|
+
'sizes' => [],
|
9
|
+
'extra_images' => []
|
10
|
+
}
|
11
|
+
|
12
|
+
def initialize(site)
|
13
|
+
@site = site
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h
|
17
|
+
DEFAULTS.merge(@site.config['responsive_image'])
|
18
|
+
.merge(site_source: @site.source, site_dest: @site.dest)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,16 +1,18 @@
|
|
1
1
|
module Jekyll
|
2
|
-
|
2
|
+
module ResponsiveImage
|
3
3
|
class ExtraImageGenerator < Jekyll::Generator
|
4
|
-
include Jekyll::ResponsiveImage::
|
4
|
+
include Jekyll::ResponsiveImage::Utils
|
5
5
|
|
6
6
|
def generate(site)
|
7
|
-
config =
|
7
|
+
config = Config.new(site).to_h
|
8
|
+
site_source = Pathname.new(site.source)
|
8
9
|
|
9
10
|
config['extra_images'].each do |pathspec|
|
10
11
|
Dir.glob(site.in_source_dir(pathspec)) do |image_path|
|
11
|
-
|
12
|
+
path = Pathname.new(image_path)
|
13
|
+
relative_image_path = path.relative_path_from(site_source)
|
12
14
|
|
13
|
-
result = ImageProcessor.process(
|
15
|
+
result = ImageProcessor.process(relative_image_path, config)
|
14
16
|
result[:resized].each { |image| keep_resized_image!(site, image) }
|
15
17
|
end
|
16
18
|
end
|
@@ -1,22 +1,24 @@
|
|
1
1
|
module Jekyll
|
2
|
-
|
2
|
+
module ResponsiveImage
|
3
3
|
class ImageProcessor
|
4
4
|
include ResponsiveImage::Utils
|
5
5
|
|
6
|
-
def process(
|
7
|
-
|
6
|
+
def process(image_path, config)
|
7
|
+
absolute_image_path = File.expand_path(image_path.to_s, config[:site_source])
|
8
|
+
|
9
|
+
raise SyntaxError.new("Invalid image path specified: #{image_path}") unless File.file?(absolute_image_path)
|
8
10
|
|
9
11
|
resize_handler = ResizeHandler.new
|
10
12
|
img = Magick::Image::read(absolute_image_path).first
|
11
13
|
|
12
14
|
{
|
13
|
-
original: image_hash(config
|
15
|
+
original: image_hash(config, image_path, img.columns, img.rows),
|
14
16
|
resized: resize_handler.resize_image(img, config),
|
15
17
|
}
|
16
18
|
end
|
17
19
|
|
18
|
-
def self.process(
|
19
|
-
self.new.process(
|
20
|
+
def self.process(image_path, config)
|
21
|
+
self.new.process(image_path, config)
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module ResponsiveImage
|
3
|
+
class Renderer
|
4
|
+
include Jekyll::ResponsiveImage::Utils
|
5
|
+
|
6
|
+
def initialize(site, attributes)
|
7
|
+
@site = site
|
8
|
+
@attributes = attributes
|
9
|
+
end
|
10
|
+
|
11
|
+
def render_responsive_image
|
12
|
+
cache_key = @attributes.to_s
|
13
|
+
result = @attributes['cache'] ? RenderCache.get(cache_key) : nil
|
14
|
+
|
15
|
+
if result.nil?
|
16
|
+
config = Config.new(@site).to_h
|
17
|
+
|
18
|
+
image = ImageProcessor.process(@attributes['path'], config)
|
19
|
+
@attributes['original'] = image[:original]
|
20
|
+
@attributes['resized'] = image[:resized]
|
21
|
+
|
22
|
+
@attributes['resized'].each { |resized| keep_resized_image!(@site, resized) }
|
23
|
+
|
24
|
+
image_template = @site.in_source_dir(@attributes['template'] || config['template'])
|
25
|
+
partial = File.read(image_template)
|
26
|
+
template = Liquid::Template.parse(partial)
|
27
|
+
|
28
|
+
result = template.render!(@attributes.merge(@site.site_payload))
|
29
|
+
|
30
|
+
RenderCache.set(cache_key, result)
|
31
|
+
end
|
32
|
+
|
33
|
+
result
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
module Jekyll
|
2
|
-
|
2
|
+
module ResponsiveImage
|
3
3
|
class ResizeHandler
|
4
4
|
include ResponsiveImage::Utils
|
5
5
|
|
@@ -14,8 +14,8 @@ module Jekyll
|
|
14
14
|
next unless needs_resizing?(img, width)
|
15
15
|
|
16
16
|
image_path = img.filename.force_encoding(Encoding::UTF_8)
|
17
|
-
filepath = format_output_path(config['output_path_format'], config
|
18
|
-
resized.push(image_hash(config
|
17
|
+
filepath = format_output_path(config['output_path_format'], config, image_path, width, height)
|
18
|
+
resized.push(image_hash(config, filepath, width, height))
|
19
19
|
|
20
20
|
site_source_filepath = File.expand_path(filepath, config[:site_source])
|
21
21
|
site_dest_filepath = File.expand_path(filepath, config[:site_dest])
|
@@ -23,10 +23,10 @@ module Jekyll
|
|
23
23
|
# Don't resize images more than once
|
24
24
|
next if File.exist?(site_source_filepath)
|
25
25
|
|
26
|
-
ensure_output_dir_exists!(
|
27
|
-
ensure_output_dir_exists!(
|
26
|
+
ensure_output_dir_exists!(site_source_filepath)
|
27
|
+
ensure_output_dir_exists!(site_dest_filepath)
|
28
28
|
|
29
|
-
Jekyll.logger.info "Generating #{
|
29
|
+
Jekyll.logger.info "Generating #{site_source_filepath}"
|
30
30
|
|
31
31
|
i = img.scale(ratio)
|
32
32
|
i.write(site_source_filepath) do |f|
|
@@ -34,6 +34,7 @@ module Jekyll
|
|
34
34
|
end
|
35
35
|
|
36
36
|
# Ensure the generated file is copied to the _site directory
|
37
|
+
Jekyll.logger.info "Copying resized image to #{site_dest_filepath}"
|
37
38
|
FileUtils.copy_file(site_source_filepath, site_dest_filepath)
|
38
39
|
|
39
40
|
i.destroy!
|
@@ -44,11 +45,19 @@ module Jekyll
|
|
44
45
|
resized
|
45
46
|
end
|
46
47
|
|
48
|
+
def format_output_path(format, config, image_path, width, height)
|
49
|
+
params = symbolize_keys(image_hash(config, image_path, width, height))
|
50
|
+
|
51
|
+
Pathname.new(format % params).cleanpath.to_s
|
52
|
+
end
|
53
|
+
|
47
54
|
def needs_resizing?(img, width)
|
48
55
|
img.columns > width
|
49
56
|
end
|
50
57
|
|
51
|
-
def ensure_output_dir_exists!(
|
58
|
+
def ensure_output_dir_exists!(path)
|
59
|
+
dir = File.dirname(path)
|
60
|
+
|
52
61
|
unless Dir.exist?(dir)
|
53
62
|
Jekyll.logger.info "Creating output directory #{dir}"
|
54
63
|
FileUtils.mkdir_p(dir)
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module Jekyll
|
2
|
-
|
2
|
+
module ResponsiveImage
|
3
3
|
class Tag < Liquid::Tag
|
4
|
-
include Jekyll::ResponsiveImage::Common
|
5
|
-
|
6
4
|
def initialize(tag_name, markup, tokens)
|
7
5
|
super
|
8
6
|
|
@@ -15,7 +13,7 @@ module Jekyll
|
|
15
13
|
end
|
16
14
|
|
17
15
|
def render(context)
|
18
|
-
|
16
|
+
Renderer.new(context.registers[:site], @attributes).render_responsive_image
|
19
17
|
end
|
20
18
|
end
|
21
19
|
end
|
@@ -1,8 +1,13 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
|
3
3
|
module Jekyll
|
4
|
-
|
4
|
+
module ResponsiveImage
|
5
5
|
module Utils
|
6
|
+
def keep_resized_image!(site, image)
|
7
|
+
keep_dir = File.dirname(image['path'])
|
8
|
+
site.config['keep_files'] << keep_dir unless site.config['keep_files'].include?(keep_dir)
|
9
|
+
end
|
10
|
+
|
6
11
|
def symbolize_keys(hash)
|
7
12
|
result = {}
|
8
13
|
hash.each_key do |key|
|
@@ -11,17 +16,11 @@ module Jekyll
|
|
11
16
|
result
|
12
17
|
end
|
13
18
|
|
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
|
18
|
-
end
|
19
|
-
|
20
19
|
# Build a hash containing image information
|
21
|
-
def image_hash(
|
20
|
+
def image_hash(config, image_path, width, height)
|
22
21
|
{
|
23
22
|
'path' => image_path,
|
24
|
-
'dirname' => relative_dirname(
|
23
|
+
'dirname' => relative_dirname(config, image_path),
|
25
24
|
'basename' => File.basename(image_path),
|
26
25
|
'filename' => File.basename(image_path, '.*'),
|
27
26
|
'extension' => File.extname(image_path).delete('.'),
|
@@ -30,9 +29,9 @@ module Jekyll
|
|
30
29
|
}
|
31
30
|
end
|
32
31
|
|
33
|
-
def relative_dirname(
|
34
|
-
path = Pathname.new(image_path)
|
35
|
-
base = Pathname.new(base_path)
|
32
|
+
def relative_dirname(config, image_path)
|
33
|
+
path = Pathname.new(File.expand_path(image_path, config[:site_source]))
|
34
|
+
base = Pathname.new(File.expand_path(config['base_path'], config[:site_source]))
|
36
35
|
|
37
36
|
path.relative_path_from(base).dirname.to_s.delete('.')
|
38
37
|
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: 1.0.0.
|
4
|
+
version: 1.0.0.pre4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joseph Wynn
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -61,11 +61,11 @@ extra_rdoc_files: []
|
|
61
61
|
files:
|
62
62
|
- lib/jekyll/responsive_image.rb
|
63
63
|
- lib/jekyll/responsive_image/block.rb
|
64
|
-
- lib/jekyll/responsive_image/
|
65
|
-
- lib/jekyll/responsive_image/defaults.rb
|
64
|
+
- lib/jekyll/responsive_image/config.rb
|
66
65
|
- lib/jekyll/responsive_image/extra_image_generator.rb
|
67
66
|
- lib/jekyll/responsive_image/image_processor.rb
|
68
67
|
- lib/jekyll/responsive_image/render_cache.rb
|
68
|
+
- lib/jekyll/responsive_image/renderer.rb
|
69
69
|
- lib/jekyll/responsive_image/resize_handler.rb
|
70
70
|
- lib/jekyll/responsive_image/tag.rb
|
71
71
|
- lib/jekyll/responsive_image/utils.rb
|
@@ -90,7 +90,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
90
|
version: 1.3.1
|
91
91
|
requirements: []
|
92
92
|
rubyforge_project:
|
93
|
-
rubygems_version: 2.
|
93
|
+
rubygems_version: 2.6.6
|
94
94
|
signing_key:
|
95
95
|
specification_version: 4
|
96
96
|
summary: Responsive images for Jekyll via srcset
|
@@ -1,46 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
class ResponsiveImage
|
3
|
-
module Common
|
4
|
-
include Jekyll::ResponsiveImage::Utils
|
5
|
-
|
6
|
-
def make_config(site)
|
7
|
-
ResponsiveImage.defaults.dup
|
8
|
-
.merge(site.config['responsive_image'])
|
9
|
-
.merge(:site_source => site.source, :site_dest => site.dest)
|
10
|
-
end
|
11
|
-
|
12
|
-
def keep_resized_image!(site, image)
|
13
|
-
keep_dir = File.dirname(image['path'])
|
14
|
-
site.config['keep_files'] << keep_dir unless site.config['keep_files'].include?(keep_dir)
|
15
|
-
end
|
16
|
-
|
17
|
-
def render_responsive_image(context, attributes)
|
18
|
-
cache_key = attributes.to_s
|
19
|
-
result = attributes['cache'] ? RenderCache.get(cache_key) : nil
|
20
|
-
|
21
|
-
if result.nil?
|
22
|
-
site = context.registers[:site]
|
23
|
-
config = make_config(site)
|
24
|
-
|
25
|
-
absolute_image_path = site.in_source_dir(attributes['path'].to_s)
|
26
|
-
image = ImageProcessor.process(absolute_image_path, attributes['path'], config)
|
27
|
-
attributes['original'] = image[:original]
|
28
|
-
attributes['resized'] = image[:resized]
|
29
|
-
|
30
|
-
attributes['resized'].each { |resized| keep_resized_image!(site, resized) }
|
31
|
-
|
32
|
-
image_template = site.in_source_dir(attributes['template'] || config['template'])
|
33
|
-
partial = File.read(image_template)
|
34
|
-
template = Liquid::Template.parse(partial)
|
35
|
-
|
36
|
-
result = template.render!(attributes.merge(site.site_payload))
|
37
|
-
|
38
|
-
|
39
|
-
RenderCache.set(cache_key, result)
|
40
|
-
end
|
41
|
-
|
42
|
-
result
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Jekyll
|
2
|
-
class ResponsiveImage
|
3
|
-
@defaults = {
|
4
|
-
'default_quality' => 85,
|
5
|
-
'base_path' => 'assets',
|
6
|
-
'output_path_format' => 'assets/resized/%{filename}-%{width}x%{height}.%{extension}',
|
7
|
-
'sizes' => [],
|
8
|
-
'extra_images' => []
|
9
|
-
}.freeze
|
10
|
-
|
11
|
-
class << self
|
12
|
-
attr_reader :defaults
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|