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.
@@ -0,0 +1,194 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ middleman-images (0.1.0)
5
+ middleman-core (>= 4.1.14)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (5.0.7.2)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 0.7, < 2)
13
+ minitest (~> 5.1)
14
+ tzinfo (~> 1.1)
15
+ addressable (2.7.0)
16
+ public_suffix (>= 2.0.2, < 5.0)
17
+ aruba (0.14.14)
18
+ childprocess (>= 0.6.3, < 4.0.0)
19
+ contracts (~> 0.9)
20
+ cucumber (>= 1.3.19)
21
+ ffi (~> 1.9)
22
+ rspec-expectations (>= 2.99)
23
+ thor (>= 0.19, < 2.0)
24
+ backports (3.15.0)
25
+ builder (3.2.4)
26
+ capybara (3.31.0)
27
+ addressable
28
+ mini_mime (>= 0.1.3)
29
+ nokogiri (~> 1.8)
30
+ rack (>= 1.6.0)
31
+ rack-test (>= 0.6.3)
32
+ regexp_parser (~> 1.5)
33
+ xpath (~> 3.2)
34
+ childprocess (3.0.0)
35
+ coffee-script (2.4.1)
36
+ coffee-script-source
37
+ execjs
38
+ coffee-script-source (1.12.2)
39
+ concurrent-ruby (1.1.5)
40
+ contracts (0.13.0)
41
+ cucumber (3.1.2)
42
+ builder (>= 2.1.2)
43
+ cucumber-core (~> 3.2.0)
44
+ cucumber-expressions (~> 6.0.1)
45
+ cucumber-wire (~> 0.0.1)
46
+ diff-lcs (~> 1.3)
47
+ gherkin (~> 5.1.0)
48
+ multi_json (>= 1.7.5, < 2.0)
49
+ multi_test (>= 0.1.2)
50
+ cucumber-core (3.2.1)
51
+ backports (>= 3.8.0)
52
+ cucumber-tag_expressions (~> 1.1.0)
53
+ gherkin (~> 5.0)
54
+ cucumber-expressions (6.0.1)
55
+ cucumber-tag_expressions (1.1.1)
56
+ cucumber-wire (0.0.1)
57
+ diff-lcs (1.3)
58
+ dotenv (2.7.5)
59
+ erubis (2.7.0)
60
+ execjs (2.7.0)
61
+ exifr (1.3.6)
62
+ fast_blank (1.0.0)
63
+ fastimage (2.1.7)
64
+ ffi (1.12.2)
65
+ fspath (3.1.2)
66
+ gherkin (5.1.0)
67
+ haml (5.1.2)
68
+ temple (>= 0.8.0)
69
+ tilt
70
+ hamster (3.0.0)
71
+ concurrent-ruby (~> 1.0)
72
+ hashie (3.6.0)
73
+ i18n (0.9.5)
74
+ concurrent-ruby (~> 1.0)
75
+ image_optim (0.26.5)
76
+ exifr (~> 1.2, >= 1.2.2)
77
+ fspath (~> 3.0)
78
+ image_size (>= 1.5, < 3)
79
+ in_threads (~> 1.3)
80
+ progress (~> 3.0, >= 3.0.1)
81
+ image_optim_pack (0.6.0)
82
+ fspath (>= 2.1, < 4)
83
+ image_optim (~> 0.19)
84
+ image_size (2.0.2)
85
+ in_threads (1.5.4)
86
+ kramdown (1.17.0)
87
+ listen (3.0.8)
88
+ rb-fsevent (~> 0.9, >= 0.9.4)
89
+ rb-inotify (~> 0.9, >= 0.9.7)
90
+ memoist (0.16.2)
91
+ middleman (4.3.5)
92
+ coffee-script (~> 2.2)
93
+ haml (>= 4.0.5)
94
+ kramdown (~> 1.2)
95
+ middleman-cli (= 4.3.5)
96
+ middleman-core (= 4.3.5)
97
+ middleman-cli (4.3.5)
98
+ thor (>= 0.17.0, < 2.0)
99
+ middleman-core (4.3.5)
100
+ activesupport (>= 4.2, < 5.1)
101
+ addressable (~> 2.3)
102
+ backports (~> 3.6)
103
+ bundler
104
+ contracts (~> 0.13.0)
105
+ dotenv
106
+ erubis
107
+ execjs (~> 2.0)
108
+ fast_blank
109
+ fastimage (~> 2.0)
110
+ hamster (~> 3.0)
111
+ hashie (~> 3.4)
112
+ i18n (~> 0.9.0)
113
+ listen (~> 3.0.0)
114
+ memoist (~> 0.14)
115
+ padrino-helpers (~> 0.13.0)
116
+ parallel
117
+ rack (>= 1.4.5, < 3)
118
+ sassc (~> 2.0)
119
+ servolux
120
+ tilt (~> 2.0.9)
121
+ uglifier (~> 3.0)
122
+ mini_magick (4.10.1)
123
+ mini_mime (1.0.2)
124
+ mini_portile2 (2.4.0)
125
+ minitest (5.14.0)
126
+ multi_json (1.14.1)
127
+ multi_test (0.1.2)
128
+ nokogiri (1.10.7)
129
+ mini_portile2 (~> 2.4.0)
130
+ padrino-helpers (0.13.3.4)
131
+ i18n (~> 0.6, >= 0.6.7)
132
+ padrino-support (= 0.13.3.4)
133
+ tilt (>= 1.4.1, < 3)
134
+ padrino-support (0.13.3.4)
135
+ activesupport (>= 3.1)
136
+ parallel (1.19.1)
137
+ progress (3.5.2)
138
+ public_suffix (4.0.3)
139
+ rack (2.1.2)
140
+ rack-test (1.1.0)
141
+ rack (>= 1.0, < 3)
142
+ rake (13.0.1)
143
+ rb-fsevent (0.10.3)
144
+ rb-inotify (0.10.1)
145
+ ffi (~> 1.0)
146
+ rdoc (6.2.1)
147
+ regexp_parser (1.6.0)
148
+ rspec (3.9.0)
149
+ rspec-core (~> 3.9.0)
150
+ rspec-expectations (~> 3.9.0)
151
+ rspec-mocks (~> 3.9.0)
152
+ rspec-core (3.9.1)
153
+ rspec-support (~> 3.9.1)
154
+ rspec-expectations (3.9.0)
155
+ diff-lcs (>= 1.2.0, < 2.0)
156
+ rspec-support (~> 3.9.0)
157
+ rspec-mocks (3.9.1)
158
+ diff-lcs (>= 1.2.0, < 2.0)
159
+ rspec-support (~> 3.9.0)
160
+ rspec-support (3.9.2)
161
+ sassc (2.2.1)
162
+ ffi (~> 1.9)
163
+ servolux (0.13.0)
164
+ temple (0.8.2)
165
+ thor (1.0.1)
166
+ thread_safe (0.3.6)
167
+ tilt (2.0.10)
168
+ tzinfo (1.2.6)
169
+ thread_safe (~> 0.1)
170
+ uglifier (3.2.0)
171
+ execjs (>= 0.3.0, < 3)
172
+ xpath (3.2.0)
173
+ nokogiri (~> 1.8)
174
+ yard (0.9.24)
175
+
176
+ PLATFORMS
177
+ ruby
178
+
179
+ DEPENDENCIES
180
+ aruba
181
+ capybara
182
+ cucumber
183
+ image_optim
184
+ image_optim_pack (= 0.6.0)
185
+ middleman (~> 4.3.0)
186
+ middleman-images!
187
+ mini_magick
188
+ rake
189
+ rdoc
190
+ rspec
191
+ yard
192
+
193
+ BUNDLED WITH
194
+ 2.1.4
@@ -0,0 +1,27 @@
1
+ # If you do not have OpenSSL installed, update
2
+ # the following line to use "http://" instead
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in middleman-images.gemspec
6
+ gemspec path: '..'
7
+
8
+
9
+ group :development do
10
+ gem 'middleman', '~> 5.0.0.rc'
11
+ gem 'rake'
12
+ gem 'rdoc'
13
+ gem 'yard'
14
+ end
15
+
16
+ group :test do
17
+ gem 'cucumber'
18
+ gem 'capybara'
19
+ gem 'aruba'
20
+ gem 'rspec'
21
+
22
+ gem 'image_optim'
23
+ gem 'mini_magick'
24
+
25
+ # Version is locked to make sure asset_hash tests are not broken by updated optimizations.
26
+ gem 'image_optim_pack', '=0.6.0'
27
+ end
@@ -0,0 +1,199 @@
1
+ PATH
2
+ remote: ..
3
+ specs:
4
+ middleman-images (0.1.0)
5
+ middleman-core (>= 4.1.14)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activesupport (5.2.4.1)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (>= 0.7, < 2)
13
+ minitest (~> 5.1)
14
+ tzinfo (~> 1.1)
15
+ addressable (2.7.0)
16
+ public_suffix (>= 2.0.2, < 5.0)
17
+ aruba (0.14.14)
18
+ childprocess (>= 0.6.3, < 4.0.0)
19
+ contracts (~> 0.9)
20
+ cucumber (>= 1.3.19)
21
+ ffi (~> 1.9)
22
+ rspec-expectations (>= 2.99)
23
+ thor (>= 0.19, < 2.0)
24
+ backports (3.15.0)
25
+ builder (3.2.4)
26
+ capybara (3.31.0)
27
+ addressable
28
+ mini_mime (>= 0.1.3)
29
+ nokogiri (~> 1.8)
30
+ rack (>= 1.6.0)
31
+ rack-test (>= 0.6.3)
32
+ regexp_parser (~> 1.5)
33
+ xpath (~> 3.2)
34
+ childprocess (3.0.0)
35
+ coffee-script (2.4.1)
36
+ coffee-script-source
37
+ execjs
38
+ coffee-script-source (1.12.2)
39
+ concurrent-ruby (1.1.5)
40
+ contracts (0.16.0)
41
+ cucumber (3.1.2)
42
+ builder (>= 2.1.2)
43
+ cucumber-core (~> 3.2.0)
44
+ cucumber-expressions (~> 6.0.1)
45
+ cucumber-wire (~> 0.0.1)
46
+ diff-lcs (~> 1.3)
47
+ gherkin (~> 5.1.0)
48
+ multi_json (>= 1.7.5, < 2.0)
49
+ multi_test (>= 0.1.2)
50
+ cucumber-core (3.2.1)
51
+ backports (>= 3.8.0)
52
+ cucumber-tag_expressions (~> 1.1.0)
53
+ gherkin (~> 5.0)
54
+ cucumber-expressions (6.0.1)
55
+ cucumber-tag_expressions (1.1.1)
56
+ cucumber-wire (0.0.1)
57
+ diff-lcs (1.3)
58
+ dotenv (2.7.5)
59
+ erubis (2.7.0)
60
+ execjs (2.7.0)
61
+ exifr (1.3.6)
62
+ fastimage (2.1.7)
63
+ ffi (1.12.2)
64
+ fspath (3.1.2)
65
+ gherkin (5.1.0)
66
+ haml (5.1.2)
67
+ temple (>= 0.8.0)
68
+ tilt
69
+ hamster (3.0.0)
70
+ concurrent-ruby (~> 1.0)
71
+ hashie (3.6.0)
72
+ i18n (0.9.5)
73
+ concurrent-ruby (~> 1.0)
74
+ image_optim (0.26.5)
75
+ exifr (~> 1.2, >= 1.2.2)
76
+ fspath (~> 3.0)
77
+ image_size (>= 1.5, < 3)
78
+ in_threads (~> 1.3)
79
+ progress (~> 3.0, >= 3.0.1)
80
+ image_optim_pack (0.6.0)
81
+ fspath (>= 2.1, < 4)
82
+ image_optim (~> 0.19)
83
+ image_size (2.0.2)
84
+ in_threads (1.5.4)
85
+ kramdown (1.17.0)
86
+ lazy_priority_queue (0.1.1)
87
+ listen (3.2.1)
88
+ rb-fsevent (~> 0.10, >= 0.10.3)
89
+ rb-inotify (~> 0.9, >= 0.9.10)
90
+ memoist (0.16.2)
91
+ middleman (5.0.0.rc.1)
92
+ coffee-script (~> 2.2)
93
+ haml (>= 4.0.5)
94
+ kramdown (~> 1.2)
95
+ middleman-cli (= 5.0.0.rc.1)
96
+ middleman-core (= 5.0.0.rc.1)
97
+ middleman-cli (5.0.0.rc.1)
98
+ thor (>= 0.17.0, < 2.0)
99
+ middleman-core (5.0.0.rc.1)
100
+ activesupport (~> 5.2)
101
+ addressable (~> 2.3)
102
+ backports (~> 3.11)
103
+ bundler
104
+ contracts (~> 0.16.0)
105
+ dotenv
106
+ erubis
107
+ execjs (~> 2.0)
108
+ fastimage (~> 2.0)
109
+ hamster (~> 3.0)
110
+ hashie (~> 3.4)
111
+ i18n (~> 0.9.0)
112
+ listen (~> 3.0)
113
+ memoist (~> 0.14)
114
+ oj (~> 3.7)
115
+ padrino-helpers (~> 0.14.4)
116
+ parallel
117
+ rack (>= 1.4.5, < 3)
118
+ rgl (~> 0.5.3)
119
+ sassc (~> 2.0)
120
+ servolux
121
+ tilt (~> 2.0.9)
122
+ uglifier (~> 4.1)
123
+ mini_magick (4.10.1)
124
+ mini_mime (1.0.2)
125
+ mini_portile2 (2.4.0)
126
+ minitest (5.14.0)
127
+ multi_json (1.14.1)
128
+ multi_test (0.1.2)
129
+ nokogiri (1.10.7)
130
+ mini_portile2 (~> 2.4.0)
131
+ oj (3.10.2)
132
+ padrino-helpers (0.14.4)
133
+ i18n (~> 0.6, >= 0.6.7)
134
+ padrino-support (= 0.14.4)
135
+ tilt (>= 1.4.1, < 3)
136
+ padrino-support (0.14.4)
137
+ parallel (1.19.1)
138
+ progress (3.5.2)
139
+ public_suffix (4.0.3)
140
+ rack (2.1.2)
141
+ rack-test (1.1.0)
142
+ rack (>= 1.0, < 3)
143
+ rake (13.0.1)
144
+ rb-fsevent (0.10.3)
145
+ rb-inotify (0.10.1)
146
+ ffi (~> 1.0)
147
+ rdoc (6.2.1)
148
+ regexp_parser (1.6.0)
149
+ rgl (0.5.6)
150
+ lazy_priority_queue (~> 0.1.0)
151
+ stream (~> 0.5.2)
152
+ rspec (3.9.0)
153
+ rspec-core (~> 3.9.0)
154
+ rspec-expectations (~> 3.9.0)
155
+ rspec-mocks (~> 3.9.0)
156
+ rspec-core (3.9.1)
157
+ rspec-support (~> 3.9.1)
158
+ rspec-expectations (3.9.0)
159
+ diff-lcs (>= 1.2.0, < 2.0)
160
+ rspec-support (~> 3.9.0)
161
+ rspec-mocks (3.9.1)
162
+ diff-lcs (>= 1.2.0, < 2.0)
163
+ rspec-support (~> 3.9.0)
164
+ rspec-support (3.9.2)
165
+ sassc (2.2.1)
166
+ ffi (~> 1.9)
167
+ servolux (0.13.0)
168
+ stream (0.5.2)
169
+ temple (0.8.2)
170
+ thor (1.0.1)
171
+ thread_safe (0.3.6)
172
+ tilt (2.0.10)
173
+ tzinfo (1.2.6)
174
+ thread_safe (~> 0.1)
175
+ uglifier (4.2.0)
176
+ execjs (>= 0.3.0, < 3)
177
+ xpath (3.2.0)
178
+ nokogiri (~> 1.8)
179
+ yard (0.9.24)
180
+
181
+ PLATFORMS
182
+ ruby
183
+
184
+ DEPENDENCIES
185
+ aruba
186
+ capybara
187
+ cucumber
188
+ image_optim
189
+ image_optim_pack (= 0.6.0)
190
+ middleman (~> 5.0.0.rc)
191
+ middleman-images!
192
+ mini_magick
193
+ rake
194
+ rdoc
195
+ rspec
196
+ yard
197
+
198
+ BUNDLED WITH
199
+ 2.1.4
@@ -0,0 +1,8 @@
1
+ require "middleman-core"
2
+
3
+ Middleman::Extensions.register :images do
4
+ require "middleman-images/extension"
5
+ require "middleman-images/image"
6
+ require "middleman-images/manipulator"
7
+ Middleman::Images::Extension
8
+ end
@@ -0,0 +1,89 @@
1
+ require 'middleman-core'
2
+ require 'pathname'
3
+ require 'padrino-helpers'
4
+
5
+ module Middleman
6
+ module Images
7
+ class Extension < ::Middleman::Extension
8
+ option :optimize, false, 'Whether to optimize images by default'
9
+ option :image_optim, {}, 'Default options for image_optim'
10
+ option :ignore_original, false, 'Whether to ignore original images in build'
11
+ option :cache_dir, 'cache', 'Specification of cache folder'
12
+
13
+ helpers do
14
+ def image_tag(url, options = {})
15
+ process_options = options.slice(:resize, :optimize)
16
+ options = { src: image_path(url, process_options) }.update(options.except(:resize, :optimize))
17
+ super
18
+ end
19
+
20
+ def image_path(url, process_options = {})
21
+ url = extensions[:images].image(url, process_options)
22
+ super url
23
+ end
24
+ end
25
+
26
+ def template_context
27
+ @template_context ||= app.template_context_class.new(app, {}, {})
28
+ end
29
+
30
+ def process(source, process_options)
31
+ destination_path(source, process_options).tap do |dest_url|
32
+ unless app.sitemap.find_resource_by_path(dest_url)
33
+ image = Image.new(app, source.source_file, dest_url, process_options.merge(cache_dir: options[:cache_dir]))
34
+ manipulator.add image
35
+ app.sitemap.register_resource_list_manipulator(:images, manipulator, 40) unless app.build?
36
+ end
37
+ end
38
+ end
39
+
40
+ def image(url, process_options)
41
+ source = app.sitemap.find_resource_by_path(absolute_image_path(url))
42
+ return url if source.nil?
43
+
44
+ process_options[:image_optim] = options[:image_optim]
45
+ process_options[:optimize] = options[:optimize] unless process_options.key?(:optimize)
46
+
47
+ if process_options[:resize] || process_options[:optimize]
48
+ url = process(source, process_options)
49
+ else
50
+ manipulator.preserve_original source
51
+ app.sitemap.register_resource_list_manipulator(:images, manipulator, 40) unless app.build?
52
+ end
53
+ url
54
+ end
55
+
56
+ def initialize(app, options_hash = {}, &block)
57
+ super
58
+ @manipulator = Manipulator.new(@app, options[:ignore_original])
59
+ end
60
+
61
+ def before_build(builder)
62
+ # trigger our image_tag helper
63
+ rack = builder.instance_variable_get(:@rack)
64
+
65
+ builder.app.logger.info "== Images: Looking for images to process"
66
+ builder.app.sitemap.resources.each do |resource|
67
+ rack.get(CGI.escape(resource.request_path)) unless resource.binary?
68
+ end
69
+ builder.app.sitemap.register_resource_list_manipulator(:images, manipulator, 40)
70
+ end
71
+
72
+ private
73
+
74
+ attr_reader :manipulator
75
+
76
+ def destination_path(source, options)
77
+ destination = source.normalized_path.sub(/#{source.ext}$/, '')
78
+ destination += '-' + template_context.escape_html(options[:resize]) if options[:resize]
79
+ destination += '-opt' if options[:optimize]
80
+ destination + source.ext
81
+ end
82
+
83
+ def absolute_image_path(url)
84
+ absolute_path = url.start_with?('/') || url.start_with?(app.config[:images_dir])
85
+ absolute_path ? url : app.config[:images_dir] + '/' + url
86
+ end
87
+ end
88
+ end
89
+ end