middleman-images 0.1.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 +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +29 -0
- data/CHANGELOG.md +32 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +194 -0
- data/LICENSE +20 -0
- data/README.md +142 -0
- data/Rakefile +18 -0
- data/features/building.feature +79 -0
- data/features/ignore_original.feature +78 -0
- data/features/image_path.feature +67 -0
- data/features/optimization.feature +57 -0
- data/features/relative_path.feature +40 -0
- data/features/resize.feature +29 -0
- data/features/support/env.rb +4 -0
- data/features/support/middleman_images_steps.rb +31 -0
- data/fixtures/image/source/images/fox.jpg +0 -0
- data/gemfiles/Gemfile.middleman-4.1 +27 -0
- data/gemfiles/Gemfile.middleman-4.1.lock +196 -0
- data/gemfiles/Gemfile.middleman-4.2 +27 -0
- data/gemfiles/Gemfile.middleman-4.2.lock +196 -0
- data/gemfiles/Gemfile.middleman-4.3 +27 -0
- data/gemfiles/Gemfile.middleman-4.3.lock +194 -0
- data/gemfiles/Gemfile.middleman-5.0-rc +27 -0
- data/gemfiles/Gemfile.middleman-5.0-rc.lock +199 -0
- data/lib/middleman-images.rb +8 -0
- data/lib/middleman-images/extension.rb +89 -0
- data/lib/middleman-images/image.rb +68 -0
- data/lib/middleman-images/manipulator.rb +49 -0
- data/lib/middleman-images/version.rb +3 -0
- data/middleman-images.gemspec +23 -0
- metadata +98 -0
@@ -0,0 +1,68 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Images
|
3
|
+
class Image
|
4
|
+
attr_reader :destination, :source
|
5
|
+
|
6
|
+
IGNORE_RESIZING = {
|
7
|
+
".svg" => "WARNING: We did not resize %{file}. Resizing SVG files will lead to ImageMagick creating an SVG with an embedded binary image thus making the file way bigger.",
|
8
|
+
".gif" => "WARNING: We did not resize %{file}. Resizing GIF files will remove the animation. If your GIF file is not animated, use JPG or PNG instead.",
|
9
|
+
}.freeze
|
10
|
+
|
11
|
+
def initialize(app, source, destination, options = {})
|
12
|
+
@app = app
|
13
|
+
@source = source
|
14
|
+
@destination = destination
|
15
|
+
@options = options
|
16
|
+
@cache = File.join(app.root, options[:cache_dir], destination).to_s
|
17
|
+
FileUtils.mkdir_p File.dirname(cache)
|
18
|
+
end
|
19
|
+
|
20
|
+
def process
|
21
|
+
return if File.exist?(cache) && File.mtime(source) < File.mtime(cache)
|
22
|
+
|
23
|
+
app.logger.info "== Images: Processing #{destination}"
|
24
|
+
FileUtils.copy(source, cache)
|
25
|
+
resize(cache, options[:resize]) unless options[:resize].nil?
|
26
|
+
optimize(cache, options[:image_optim]) if options[:optimize]
|
27
|
+
end
|
28
|
+
|
29
|
+
def resource
|
30
|
+
@resource ||= ::Middleman::Sitemap::Resource.new(app.sitemap, destination, cache)
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def resize(image_path, options)
|
36
|
+
begin
|
37
|
+
require 'mini_magick'
|
38
|
+
rescue LoadError
|
39
|
+
raise 'The gem "mini_magick" is required for image resizing. Please install "mini_magick" or remove the resize option.'
|
40
|
+
end
|
41
|
+
|
42
|
+
image_ext = File.extname(image_path)
|
43
|
+
if IGNORE_RESIZING.keys.include? image_ext
|
44
|
+
app.logger.warn("== Images: " + (IGNORE_RESIZING[image_ext] % { file: image_path }))
|
45
|
+
return
|
46
|
+
end
|
47
|
+
|
48
|
+
image = MiniMagick::Image.new(image_path) do |i|
|
49
|
+
i.resize(options)
|
50
|
+
i.define('jpeg:preserve-settings')
|
51
|
+
end
|
52
|
+
image.write image_path
|
53
|
+
end
|
54
|
+
|
55
|
+
def optimize(image_path, options)
|
56
|
+
begin
|
57
|
+
require 'image_optim'
|
58
|
+
rescue LoadError
|
59
|
+
raise "The gem 'image_option' is required for image optimization. Please install the gem 'image_optim' or set the option optimize: false."
|
60
|
+
end
|
61
|
+
|
62
|
+
ImageOptim.new(options).optimize_image!(image_path)
|
63
|
+
end
|
64
|
+
|
65
|
+
attr_accessor :app, :cache, :options
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Middleman
|
2
|
+
module Images
|
3
|
+
class Manipulator
|
4
|
+
def initialize(app, ignore_original)
|
5
|
+
@app = app
|
6
|
+
@images = []
|
7
|
+
@required_originals = []
|
8
|
+
@ignore_original = ignore_original
|
9
|
+
end
|
10
|
+
|
11
|
+
def add(image)
|
12
|
+
unless images.collect(&:destination).include? image.destination
|
13
|
+
images << image
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def preserve_original(resource)
|
18
|
+
required_originals << resource.source_file
|
19
|
+
end
|
20
|
+
|
21
|
+
def manipulate_resource_list(resources)
|
22
|
+
ignore_orginal_resources(resources) if ignore_original
|
23
|
+
resources + processed_images
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
attr_accessor :app, :images, :ignore_original, :required_originals
|
29
|
+
|
30
|
+
def processed_images
|
31
|
+
images.each(&:process)
|
32
|
+
images.collect(&:resource)
|
33
|
+
end
|
34
|
+
|
35
|
+
def ignore_orginal_resources(resources)
|
36
|
+
originals = images.map(&:source)
|
37
|
+
unused_originals = originals - required_originals
|
38
|
+
|
39
|
+
resources.each do |resource|
|
40
|
+
if unused_originals.include? resource.source_file
|
41
|
+
resource.ignore!
|
42
|
+
elsif required_originals.include? resource.source_file
|
43
|
+
resource.ignored = false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "middleman-images/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "middleman-images"
|
7
|
+
s.version = MiddlemanImages::VERSION.dup
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.licenses = ["MIT"]
|
10
|
+
s.authors = ["Ruben Grimm", "Julian Schneider"]
|
11
|
+
s.email = ["ruben.grimm@zweitag.de", "julian.schneider@zweitag.de"]
|
12
|
+
s.homepage = "https://www.github.com/zweitag/middleman-images"
|
13
|
+
s.summary = "Resize and optimize images for Middleman"
|
14
|
+
s.description = "Resize and optimize images for Middleman"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
s.required_ruby_version = '>= 2.5.0'
|
21
|
+
|
22
|
+
s.add_runtime_dependency("middleman-core", [">= 4.1.14"])
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,98 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: middleman-images
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ruben Grimm
|
8
|
+
- Julian Schneider
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2020-02-05 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: middleman-core
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ">="
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 4.1.14
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 4.1.14
|
28
|
+
description: Resize and optimize images for Middleman
|
29
|
+
email:
|
30
|
+
- ruben.grimm@zweitag.de
|
31
|
+
- julian.schneider@zweitag.de
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- ".gitignore"
|
37
|
+
- ".travis.yml"
|
38
|
+
- CHANGELOG.md
|
39
|
+
- Gemfile
|
40
|
+
- Gemfile.lock
|
41
|
+
- LICENSE
|
42
|
+
- README.md
|
43
|
+
- Rakefile
|
44
|
+
- features/building.feature
|
45
|
+
- features/ignore_original.feature
|
46
|
+
- features/image_path.feature
|
47
|
+
- features/optimization.feature
|
48
|
+
- features/relative_path.feature
|
49
|
+
- features/resize.feature
|
50
|
+
- features/support/env.rb
|
51
|
+
- features/support/middleman_images_steps.rb
|
52
|
+
- fixtures/image/source/images/fox.jpg
|
53
|
+
- gemfiles/Gemfile.middleman-4.1
|
54
|
+
- gemfiles/Gemfile.middleman-4.1.lock
|
55
|
+
- gemfiles/Gemfile.middleman-4.2
|
56
|
+
- gemfiles/Gemfile.middleman-4.2.lock
|
57
|
+
- gemfiles/Gemfile.middleman-4.3
|
58
|
+
- gemfiles/Gemfile.middleman-4.3.lock
|
59
|
+
- gemfiles/Gemfile.middleman-5.0-rc
|
60
|
+
- gemfiles/Gemfile.middleman-5.0-rc.lock
|
61
|
+
- lib/middleman-images.rb
|
62
|
+
- lib/middleman-images/extension.rb
|
63
|
+
- lib/middleman-images/image.rb
|
64
|
+
- lib/middleman-images/manipulator.rb
|
65
|
+
- lib/middleman-images/version.rb
|
66
|
+
- middleman-images.gemspec
|
67
|
+
homepage: https://www.github.com/zweitag/middleman-images
|
68
|
+
licenses:
|
69
|
+
- MIT
|
70
|
+
metadata: {}
|
71
|
+
post_install_message:
|
72
|
+
rdoc_options: []
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: 2.5.0
|
80
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
requirements: []
|
86
|
+
rubygems_version: 3.0.3
|
87
|
+
signing_key:
|
88
|
+
specification_version: 4
|
89
|
+
summary: Resize and optimize images for Middleman
|
90
|
+
test_files:
|
91
|
+
- features/building.feature
|
92
|
+
- features/ignore_original.feature
|
93
|
+
- features/image_path.feature
|
94
|
+
- features/optimization.feature
|
95
|
+
- features/relative_path.feature
|
96
|
+
- features/resize.feature
|
97
|
+
- features/support/env.rb
|
98
|
+
- features/support/middleman_images_steps.rb
|