jekyll-assets 2.3.2 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3fcef9566f69a9e9edd270a4436d985ca8c521ae
4
- data.tar.gz: 045c46a0cc068d145889a5bf9b25c0c31cb9cdd6
3
+ metadata.gz: c3f85683208d7c6a5e8212c0a26d86765fc44b4d
4
+ data.tar.gz: ab4ab48388c30fb14de9b49884ee89f700f04948
5
5
  SHA512:
6
- metadata.gz: f29503cacd1682b50de47d7833b15fc5bf8709a3578ebd9f09e3f36eb1c18d927890bd7a71e67318b201fb311c4b1ec66aacbb25606f2b3518bc07950e958b02
7
- data.tar.gz: 909fe0232e4a189efb91611c45147665c6d3b42ee0608cebd0039a1b0d54db6918e5f790d92c7e2dd6e16f9262acf50f4118f91904ca389374b32bd91a7638c9
6
+ metadata.gz: '0619236826dae97812c7c9ad4e647b3ced92ac1eed4acf924fbe36163cb98270ef7a36aec3231b1bd21b1527efc4db31b8c14d8cedfb2bf564a49581c0d8a768'
7
+ data.tar.gz: a37c926b28a79d8e6be32d2067236fd63f34cb20d6bac7ff35935b8fe1387deec574cbf21254e70590db5ae37809134fdd834b5ef692335911a7879347481d52
data/Gemfile CHANGED
@@ -10,7 +10,6 @@ group :development do
10
10
  end
11
11
 
12
12
  group :test do
13
- gem "luna-rubocop-formatters", :require => false
14
13
  gem "codeclimate-test-reporter", :require => false
15
14
  gem "rubocop", :require => false
16
15
  end
@@ -22,4 +21,6 @@ gem "jekyll", "#{ENV["JEKYLL_VERSION"]}" if ENV["JEKYLL_VERSION"]
22
21
  gem "font-awesome-sass", "~> 4.4", :require => false
23
22
  gem "bootstrap-sass", "~> 3.3", :require => false
24
23
  gem "mini_magick", "~> 4.2", :require => false
24
+ gem "image_optim", "~> 0.25", :require => false
25
+ gem "image_optim_pack", "~> 0.5", :require => false
25
26
  gem "less", "~> 2.6.0", :require => false
data/README.md CHANGED
@@ -1,11 +1,12 @@
1
- [![Build Status](https://travis-ci.org/jekyll/jekyll-assets.svg?branch=master)][travis]
2
- [![Coverage Status](https://codeclimate.com/github/jekyll/jekyll-assets/badges/coverage.svg)][coverage]
3
- [![code-climate](https://codeclimate.com/github/jekyll/jekyll-assets/badges/gpa.svg)][code-climate] [![Dependencies Status](https://gemnasium.com/jekyll/jekyll-assets.svg)][gemnasium]
4
-
5
- [gemnasium]: https://gemnasium.com/jekyll/jekyll-assets
6
- [code-climate]: https://codeclimate.com/github/jekyll/jekyll-assets
7
- [coverage]: https://codeclimate.com/github/jekyll/jekyll-assets/coverage
8
- [travis]: https://travis-ci.org/jekyll/jekyll-assets
1
+ <p align=center>
2
+ <a href=https://goo.gl/BhrgjW>
3
+ <img src=https://envygeeks.io/badges/paypal-large_1.png alt=Donate>
4
+ </a>
5
+ <br>
6
+ <a href=https://travis-ci.org/jekyll/jekyll-assets>
7
+ <img src="https://travis-ci.org/jekyll/jekyll-assets.svg?branch=master" alt=Status>
8
+ </a>
9
+ </p>
9
10
 
10
11
  # Jekyll Assets
11
12
 
@@ -14,18 +15,22 @@ Jekyll assets is an asset pipeline using Sprockets 3 to build specifically for J
14
15
  ## Using Jekyll Assets with Jekyll
15
16
 
16
17
  ```ruby
17
- group :plugins do
18
+ # Gemfile
19
+ group :jekyll_plugins do
18
20
  gem "jekyll-assets"
19
21
  end
20
22
  ```
21
23
 
22
24
  ```yaml
23
- gems:
25
+ # _config.yml
26
+ plugins:
24
27
  - jekyll-assets
25
28
  ```
26
29
 
27
30
  ## Configuration
28
31
 
32
+ The configuration file is the same as Jekyll's, which is _config.yml. Use the special key "assets":
33
+
29
34
  ```yaml
30
35
  assets:
31
36
  compress:
@@ -156,6 +161,24 @@ Start up your local Jekyll server and if everything is correct, your site will b
156
161
 
157
162
  * ES6 `gem "sprockets-es6"`
158
163
  * Image Magick `gem "mini_magick"`
164
+ * ImageOptim `gem "image_optim"`
165
+
166
+ ```yml
167
+ assets:
168
+ image_optim:
169
+ default:
170
+ verbose: true
171
+ zero_png:
172
+ advpng:
173
+ level: 0
174
+ optipng:
175
+ level: 0
176
+ pngout:
177
+ strategy: 4
178
+ ```
179
+
180
+ Check the [ImageOptim docs](https://github.com/toy/image_optim#configuration) to get idea about configuration options.
181
+
159
182
  * LESS `gem "less"`
160
183
 
161
184
  ## Bower
@@ -266,6 +289,18 @@ time we will reject all pull requests that wish to add any digested paths as
266
289
  those are dynamically created when a proxy is ran so we can never predict
267
290
  it reliably unless we proxy and that would be a performance problem.
268
291
 
292
+ ### Dynamically loading assets
293
+
294
+ Using Liquid Drop `assets`, you can check whether an asset is present.
295
+
296
+ ```liquid
297
+ {% if assets[page.image] %}
298
+ {% img '{{ page.image }}' %}
299
+ {% else %}
300
+ {% img 'default.jpg' %}
301
+ {% endif %}
302
+ ```
303
+
269
304
  ## ERB Support
270
305
 
271
306
  ERB Support is removed in favor of trying to get this included on Github Pages
@@ -375,6 +410,16 @@ to get an idea what `<value>` can be.
375
410
  * `magick:one-fourth`, `magick:1/4`
376
411
  * `magick:half`, `magick:1/2`
377
412
 
413
+ ### ImageOptim Proxy arguments:
414
+
415
+ **NOTE: You'll need the `image_optim` gem installed for these to work**
416
+ To install `image_optim`, add `gem "image_optim"` to your `Gemfile`
417
+
418
+ See the [ImageOptim docs](https://github.com/toy/image_optim#gem-installation) to ensure proper dependencies installation.
419
+
420
+ * `image_optim:default` same as `image_optim:preset:default`
421
+ * `image_optim:preset:<name>`
422
+
378
423
  ## Having trouble with our documentation?
379
424
 
380
425
  If you do not understand something in our documentation please feel
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- require "luna/rubocop/rake/task"
1
+ require "rubocop/rake_task"
2
2
  require "rspec/core/rake_task"
3
3
  RSpec::Core::RakeTask.new(:spec)
4
4
  task :default => [:spec]
data/lib/jekyll/assets.rb CHANGED
@@ -9,12 +9,11 @@ require "jekyll"
9
9
 
10
10
  requires = [ :liquid,
11
11
  :patches, "", :hooks, :addons,
12
- :proxies, :processors
13
- ]
12
+ :proxies, :processors]
14
13
 
15
14
  requires.each do |part|
16
- Pathutil.new(File.expand_path("../", __FILE__)).join("assets", part.to_s)
17
- .glob("{*,**/*}.rb").map(&method(
15
+ Pathutil.new(__dir__).join('assets', part.to_s)
16
+ .glob('{*,**/*}.rb').map(&method(
18
17
  :require
19
- ))
18
+ ))
20
19
  end
@@ -6,6 +6,7 @@ module Jekyll
6
6
  module Assets
7
7
  class Env < Sprockets::Environment
8
8
  attr_accessor :jekyll
9
+ attr_reader :cache_path
9
10
 
10
11
  class << self
11
12
 
@@ -111,8 +112,8 @@ module Jekyll
111
112
  path ? super(path) : super()
112
113
  @jekyll = jekyll
113
114
 
114
- # Analagous to Jekyll::Site @source and @destination paths
115
- @cache_path = asset_config.fetch("cache", ".asset-cache")
115
+ # TODO: In Jekyll-Assets 3 this should be fixed up to be a method.
116
+ @cache_path = asset_config.fetch("cache", ".asset-cache") || ".asset-cache"
116
117
  if File.exist?(cache_path_in_source_dir = jekyll.in_source_dir(@cache_path))
117
118
  @cache_path = cache_path_in_source_dir
118
119
  end
@@ -148,7 +149,7 @@ module Jekyll
148
149
  # @return [Pathname/Pathutil]
149
150
  # --
150
151
  def in_cache_dir(*paths)
151
- paths.reduce(@cache_path) do |base, path|
152
+ paths.reduce(cache_path) do |base, path|
152
153
  Jekyll.sanitized_path(base, path)
153
154
  end
154
155
  end
@@ -9,18 +9,10 @@ Jekyll::Assets::Hook.register :env, :init do
9
9
  )
10
10
 
11
11
  if cache != false && type != "memory"
12
- self.cache = begin
13
- Sprockets::Cache::FileStore.new(
14
- jekyll.in_source_dir(
15
- cache
16
- )
17
- )
18
- end
12
+ self.cache = Sprockets::Cache::FileStore.new(cache_path)
19
13
 
20
14
  elsif cache && type == "memory"
21
- self.cache = begin
22
- Sprockets::Cache::MemoryStore.new
23
- end
15
+ self.cache = Sprockets::Cache::MemoryStore.new
24
16
 
25
17
  else
26
18
  Jekyll.logger.info "", "Asset caching is disabled by configuration. " \
@@ -24,7 +24,19 @@ module Jekyll
24
24
  # ------------------------------------------------------------------
25
25
 
26
26
  def self.add(name, tag, *args, &block)
27
- add_by_class(*generate_class(name, tag, &block), *args)
27
+ if tag.is_a?(Array)
28
+ return tag.each do |v|
29
+ klass = generate_class(name, v, &block)
30
+ add_by_class(*klass,
31
+ *args
32
+ )
33
+ end
34
+ end
35
+
36
+ klass = generate_class(name, tag, &block)
37
+ add_by_class(*klass,
38
+ *args
39
+ )
28
40
  end
29
41
 
30
42
  # ------------------------------------------------------------------
@@ -0,0 +1,80 @@
1
+ # ----------------------------------------------------------------------------
2
+ # Frozen-string-literal: true
3
+ # Copyright: 2017 - MIT License
4
+ # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
6
+
7
+ try_require "image_optim" do
8
+ IMAGE_OPTIM_ARGS = %W(preset).freeze
9
+ IMAGE_OPTIM_PRESETS = %W(@default).freeze
10
+
11
+ class JekyllAssetsImageOptim
12
+
13
+ class UnknownPresetError < RuntimeError
14
+ def initialize(presetName)
15
+ "Unknown image_optim preset '#{ presetName }'"
16
+ end
17
+ end
18
+
19
+ # ------------------------------------------------------------------------
20
+
21
+ class PresetAlreadySpecifiedError < RuntimeError
22
+ def initialize
23
+ "Specifying pre-defined preset and preset-by-name at the same time is not supported"
24
+ end
25
+ end
26
+
27
+ # ------------------------------------------------------------------------
28
+
29
+ class MultiplePredefinedPresetsSpecifiedError < RuntimeError
30
+ def initialize
31
+ "Specifying multiple pre-defined presets at the same time is not supported"
32
+ end
33
+ end
34
+
35
+ # ------------------------------------------------------------------------
36
+
37
+ def initialize(asset, opts, args)
38
+ @asset = asset
39
+ @opts = opts
40
+ @args = args
41
+ end
42
+
43
+ # ------------------------------------------------------------------------
44
+
45
+ def process
46
+ asset_config = @asset.env.asset_config || {}
47
+ image_optim_config = asset_config["image_optim"] || {}
48
+
49
+ predefinedPresets = (@opts.keys - IMAGE_OPTIM_ARGS.map(&:to_sym))
50
+
51
+ raise PresetAlreadySpecifiedError if @opts.key?(:preset) && predefinedPresets.any?
52
+ raise MultiplePredefinedPresetsSpecifiedError if predefinedPresets.count > 1
53
+
54
+ presetName = @opts[:preset]
55
+ presetName = predefinedPresets.first.to_s unless presetName || !predefinedPresets.any?
56
+
57
+ if presetName != "default" && !image_optim_config.key?(presetName)
58
+ raise UnknownPresetError, presetName
59
+ end
60
+ config = image_optim_config[presetName] || {}
61
+
62
+ image_optim = ::ImageOptim.new(config)
63
+ image_optim.optimize_image!(@asset.filename)
64
+ end
65
+
66
+ end
67
+
68
+ Jekyll::Assets::Env.liquid_proxies.add :image_optim, [:img, :asset_path], *(IMAGE_OPTIM_ARGS + IMAGE_OPTIM_PRESETS) do
69
+ def initialize(asset, opts, args)
70
+ @imageOptim = JekyllAssetsImageOptim.new(asset, opts, args)
71
+ end
72
+
73
+ # ------------------------------------------------------------------------
74
+
75
+ def process
76
+ @imageOptim.process
77
+ end
78
+
79
+ end
80
+ end
@@ -5,14 +5,12 @@
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
7
  try_require "mini_magick" do
8
- args = %W(resize quality rotate crop flip format gravity)
9
- presets = %W(@2x @4x @1/2 @1/3 @2/3 @1/4 @2/4 @3/4
8
+ MINI_MAGICK_ARGS = %W(resize quality rotate crop flip format gravity strip).freeze
9
+ MINI_MAGICK_PRESETS = %W(@2x @4x @1/2 @1/3 @2/3 @1/4 @2/4 @3/4
10
10
  @double @quadruple @half @one-third @two-thirds @one-fourth
11
- @two-fourths @three-fourths)
11
+ @two-fourths @three-fourths).freeze
12
12
 
13
- Jekyll::Assets::Env.liquid_proxies.add :magick, :img, *(args + presets) do
14
- PRESETS = presets
15
- ARGS = args
13
+ class JekyllAssetsMiniMagic
16
14
 
17
15
  class DoubleResizeError < RuntimeError
18
16
  def initialize
@@ -26,8 +24,8 @@ try_require "mini_magick" do
26
24
  # ------------------------------------------------------------------------
27
25
 
28
26
  def initialize(asset, opts, args)
29
- @opts = opts
30
27
  @asset = asset
28
+ @opts = opts
31
29
  @args = args
32
30
  end
33
31
 
@@ -73,7 +71,7 @@ try_require "mini_magick" do
73
71
 
74
72
  private
75
73
  def preset?
76
- (@opts.keys - ARGS.map(&:to_sym)).any?
74
+ (@opts.keys - MINI_MAGICK_ARGS.map(&:to_sym)).any?
77
75
  end
78
76
 
79
77
  # ------------------------------------------------------------------------
@@ -140,6 +138,13 @@ try_require "mini_magick" do
140
138
  end
141
139
  end
142
140
 
141
+ # ------------------------------------------------------------------------
142
+
143
+ private
144
+ def magick_strip(_, cmd)
145
+ cmd.strip
146
+ end
147
+
143
148
  # ------------------------------------------------------------------------
144
149
  # I just want you to know, we don't even care if you do multiple
145
150
  # resizes or try to, we don't attempt to even attempt to attempt to care
@@ -171,5 +176,19 @@ try_require "mini_magick" do
171
176
  # rubocop:enable Style/ParallelAssignment
172
177
  # rubocop:enable Metrics/AbcSize
173
178
  # ------------------------------------------------------------------------
179
+
180
+ end
181
+
182
+ Jekyll::Assets::Env.liquid_proxies.add :magick, [:img, :asset_path], *(MINI_MAGICK_ARGS + MINI_MAGICK_PRESETS) do
183
+ def initialize(asset, opts, args)
184
+ @miniMagick = JekyllAssetsMiniMagic.new(asset, opts, args)
185
+ end
186
+
187
+ # ------------------------------------------------------------------------
188
+
189
+ def process
190
+ @miniMagick.process
191
+ end
192
+
174
193
  end
175
194
  end
@@ -4,6 +4,6 @@
4
4
 
5
5
  module Jekyll
6
6
  module Assets
7
- VERSION="2.3.2"
7
+ VERSION="2.4.0"
8
8
  end
9
9
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.2
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordon Bedwell
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-06-21 00:00:00.000000000 Z
13
+ date: 2017-09-29 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rack
@@ -226,6 +226,7 @@ files:
226
226
  - lib/jekyll/assets/patches/sprockets/asset.rb
227
227
  - lib/jekyll/assets/processors/less.rb
228
228
  - lib/jekyll/assets/processors/liquid.rb
229
+ - lib/jekyll/assets/proxies/image_optim.rb
229
230
  - lib/jekyll/assets/proxies/magick.rb
230
231
  - lib/jekyll/assets/version.rb
231
232
  homepage: http://github.com/jekyll/jekyll-assets/
@@ -248,7 +249,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
248
249
  version: '0'
249
250
  requirements: []
250
251
  rubyforge_project:
251
- rubygems_version: 2.5.1
252
+ rubygems_version: 2.6.13
252
253
  signing_key:
253
254
  specification_version: 4
254
255
  summary: Assets for Jekyll