jekyll-assets 2.1.3 → 2.2.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.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -2
  3. data/LICENSE +2 -2
  4. data/README.md +38 -31
  5. data/Rakefile +1 -40
  6. data/lib/jekyll-assets.rb +3 -1
  7. data/lib/jekyll/assets.rb +18 -16
  8. data/lib/jekyll/assets/addons.rb +3 -9
  9. data/lib/jekyll/assets/addons/autoprefixer.rb +6 -2
  10. data/lib/jekyll/assets/addons/bootstrap.rb +3 -1
  11. data/lib/jekyll/assets/addons/fontawesome.rb +7 -0
  12. data/lib/jekyll/assets/addons/{js_es6.rb → javascript.rb} +3 -1
  13. data/lib/jekyll/assets/addons/less.rb +9 -0
  14. data/lib/jekyll/assets/cached.rb +13 -2
  15. data/lib/jekyll/assets/config.rb +24 -14
  16. data/lib/jekyll/assets/env.rb +92 -40
  17. data/lib/jekyll/assets/hook.rb +14 -4
  18. data/lib/jekyll/assets/hooks.rb +5 -5
  19. data/lib/jekyll/assets/hooks/cache.rb +11 -3
  20. data/lib/jekyll/assets/hooks/compression.rb +12 -2
  21. data/lib/jekyll/assets/hooks/{configuration.rb → config.rb} +3 -1
  22. data/lib/jekyll/assets/hooks/erb.rb +15 -0
  23. data/lib/jekyll/assets/hooks/helpers.rb +4 -3
  24. data/lib/jekyll/assets/hooks/jekyll/drops.rb +3 -1
  25. data/lib/jekyll/assets/hooks/jekyll/setup.rb +6 -8
  26. data/lib/jekyll/assets/hooks/jekyll/write.rb +6 -2
  27. data/lib/jekyll/assets/hooks/logger.rb +6 -2
  28. data/lib/jekyll/assets/hooks/sources.rb +4 -1
  29. data/lib/jekyll/assets/hooks/sprockets.rb +3 -1
  30. data/lib/jekyll/assets/hooks/version.rb +6 -2
  31. data/lib/jekyll/assets/liquid.rb +3 -1
  32. data/lib/jekyll/assets/liquid/drop.rb +20 -2
  33. data/lib/jekyll/assets/liquid/filters.rb +13 -14
  34. data/lib/jekyll/assets/liquid/tag.rb +101 -39
  35. data/lib/jekyll/assets/liquid/tag/defaults.rb +2 -0
  36. data/lib/jekyll/assets/liquid/tag/defaults/image.rb +25 -5
  37. data/lib/jekyll/assets/liquid/tag/parser.rb +27 -19
  38. data/lib/jekyll/assets/liquid/tag/proxied_asset.rb +33 -20
  39. data/lib/jekyll/assets/liquid/tag/proxies.rb +21 -16
  40. data/lib/jekyll/assets/logger.rb +29 -15
  41. data/lib/jekyll/assets/manifest.rb +98 -0
  42. data/lib/jekyll/assets/patches.rb +4 -2
  43. data/lib/jekyll/assets/patches/jekyll/site.rb +0 -4
  44. data/lib/jekyll/assets/patches/kernel.rb +4 -14
  45. data/lib/jekyll/assets/patches/sprockets/asset.rb +10 -4
  46. data/lib/jekyll/assets/patches/sprockets/helpers.rb +31 -0
  47. data/lib/jekyll/assets/processors.rb +1 -0
  48. data/lib/jekyll/assets/processors/less.rb +68 -0
  49. data/lib/jekyll/assets/processors/liquid.rb +46 -0
  50. data/lib/jekyll/assets/proxies.rb +1 -0
  51. data/lib/jekyll/assets/proxies/magick.rb +167 -0
  52. data/lib/jekyll/assets/version.rb +4 -2
  53. metadata +52 -23
  54. data/lib/jekyll/assets/addons/compass.rb +0 -11
  55. data/lib/jekyll/assets/addons/font_awesome.rb +0 -5
  56. data/lib/jekyll/assets/addons/processors/liquid.rb +0 -31
  57. data/lib/jekyll/assets/addons/proxies/magick.rb +0 -126
  58. data/lib/jekyll/assets/hooks/context_patches.rb +0 -17
  59. data/lib/jekyll/assets/hooks/disable_erb.rb +0 -10
  60. data/lib/jekyll/assets/patches/jekyll/cleaner.rb +0 -15
@@ -1,7 +1,11 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  Jekyll::Hooks.register :site, :post_write do |jekyll|
6
- jekyll.sprockets.write_all
8
+ if jekyll.sprockets.asset_config["autowrite"]
9
+ then jekyll.sprockets.write_all
10
+ end
7
11
  end
@@ -1,7 +1,11 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  Jekyll::Assets::Hook.register :env, :init do
6
- self.logger = Jekyll::Assets::Logger.new
8
+ if jekyll.config["verbose"]
9
+ self.logger = Jekyll::Assets::Logger.new
10
+ end
7
11
  end
@@ -1,9 +1,12 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  Jekyll::Assets::Hook.register :env, :init do
6
8
  asset_config["sources"] ||= []
9
+
7
10
  asset_config["sources"].each do |path|
8
11
  append_path jekyll.in_source_dir(path)
9
12
  end
@@ -1,6 +1,8 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  Jekyll::Assets::Hook.register :env, :init do
6
8
  jekyll.sprockets = self
@@ -1,7 +1,11 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  Jekyll::Assets::Hook.register :env, :init do
6
- self.version = Digest::MD5.hexdigest(asset_config.inspect)
8
+ self.version = Digest::MD5.hexdigest(
9
+ asset_config.inspect
10
+ )
7
11
  end
@@ -1,6 +1,8 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  module Jekyll
6
8
  module Assets
@@ -1,6 +1,8 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  require "fastimage"
6
8
 
@@ -15,33 +17,46 @@ module Jekyll
15
17
  @asset = nil
16
18
  end
17
19
 
20
+ # --------------------------------------------------------------------
21
+
22
+ def_delegator :asset, :digest_path
18
23
  def_delegator :asset, :logical_path
19
24
  def_delegator :asset, :content_type, :type
20
25
  def_delegator :asset, :content_type
21
26
  def_delegator :asset, :filename
22
27
 
28
+ # --------------------------------------------------------------------
29
+
23
30
  def basename
24
31
  File.basename(@path)
25
32
  end
26
33
 
34
+ # --------------------------------------------------------------------
35
+
27
36
  def width
28
37
  if image?
29
38
  dimensions.first
30
39
  end
31
40
  end
32
41
 
42
+ # --------------------------------------------------------------------
43
+
33
44
  def height
34
45
  if image?
35
46
  dimensions.last
36
47
  end
37
48
  end
38
49
 
50
+ # --------------------------------------------------------------------
51
+
39
52
  def dimensions
40
53
  if image?
41
54
  @dimensions ||= FastImage.new(asset.filename).size
42
55
  end
43
56
  end
44
57
 
58
+ # --------------------------------------------------------------------
59
+
45
60
  private
46
61
  def image?
47
62
  %W(image/png image/jpeg image/gif).include?(
@@ -49,9 +64,12 @@ module Jekyll
49
64
  )
50
65
  end
51
66
 
67
+ # --------------------------------------------------------------------
68
+
52
69
  private
53
70
  def asset
54
- @asset ||= @jekyll.sprockets.find_asset(@path)
71
+ @asset ||= @jekyll.sprockets.manifest.find(@path) \
72
+ .first
55
73
  end
56
74
  end
57
75
  end
@@ -1,21 +1,17 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  module Jekyll
6
8
  module Assets
7
9
  module Liquid
8
10
  module Filters
9
- ACCEPTABLE_FILTERS = %W(
10
- css
11
- image
12
- asset_path
13
- stylesheet
14
- javascript
15
- style
16
- img
17
- js
18
- )
11
+ ACCEPTABLE_FILTERS = [:css, :img, :asset_path, :stylesheet,
12
+ :javascript, :style, :img, :js]
13
+
14
+ # --------------------------------------------------------------------
19
15
 
20
16
  ACCEPTABLE_FILTERS.each do |val|
21
17
  define_method val do |path, args = ""|
@@ -23,9 +19,12 @@ module Jekyll
23
19
  end
24
20
  end
25
21
  end
22
+
23
+ #
24
+
25
+ ::Liquid::Template.register_filter(
26
+ Filters
27
+ )
26
28
  end
27
29
  end
28
30
  end
29
-
30
- # Register it with Liquid, good luck from here.
31
- Liquid::Template.register_filter(Jekyll::Assets::Liquid::Filters)
@@ -1,6 +1,8 @@
1
+ # ----------------------------------------------------------------------------
1
2
  # Frozen-string-literal: true
2
- # Copyright: 2012-2015 - MIT License
3
+ # Copyright: 2012 - 2016 - MIT License
3
4
  # Encoding: utf-8
5
+ # ----------------------------------------------------------------------------
4
6
 
5
7
  require "fastimage"
6
8
 
@@ -14,17 +16,23 @@ module Jekyll
14
16
  require_relative "tag/parser"
15
17
  attr_reader :args
16
18
 
19
+ # --------------------------------------------------------------------
20
+
17
21
  class << self
18
22
  public :new
19
23
  end
20
24
 
25
+ # --------------------------------------------------------------------
26
+
21
27
  class AssetNotFoundError < StandardError
22
28
  def initialize(asset)
23
29
  super "Could not find the asset `#{asset}'"
24
30
  end
25
31
  end
26
32
 
27
- #
33
+ # --------------------------------------------------------------------
34
+ # Tags that we allow our users to use.
35
+ # --------------------------------------------------------------------
28
36
 
29
37
  AcceptableTags = %W(
30
38
  img
@@ -39,15 +47,19 @@ module Jekyll
39
47
  js
40
48
  ).freeze
41
49
 
42
- #
50
+ # --------------------------------------------------------------------
51
+ # The HTML version of every tag that we accept.
52
+ # --------------------------------------------------------------------
43
53
 
44
54
  Tags = {
45
- "css" => %{<link type="text/css" rel="stylesheet" href="%s"%s>},
46
- "js" => %{<script type="text/javascript" src="%s"%s></script>},
47
- "img" => %{<img src="%s"%s>}
55
+ "css" => %(<link type="text/css" rel="stylesheet" href="%s"%s>),
56
+ "js" => %(<script type="text/javascript" src="%s"%s></script>),
57
+ "img" => %(<img src="%s"%s>)
48
58
  }.freeze
49
59
 
50
- #
60
+ # --------------------------------------------------------------------
61
+ # Allows us to normalize tags so we can simplify logic.
62
+ # --------------------------------------------------------------------
51
63
 
52
64
  Alias = {
53
65
  "image" => "img",
@@ -56,9 +68,10 @@ module Jekyll
56
68
  "style" => "css"
57
69
  }.freeze
58
70
 
59
- #
71
+ # --------------------------------------------------------------------
60
72
 
61
73
  def initialize(tag, args, tokens)
74
+ tag = tag.to_s
62
75
  @tokens = tokens
63
76
  @tag = from_alias(tag)
64
77
  @args = Parser.new(args, @tag)
@@ -66,34 +79,39 @@ module Jekyll
66
79
  super
67
80
  end
68
81
 
82
+ # --------------------------------------------------------------------
69
83
  # NOTE: We only attach to the regenerator if you are using digested
70
84
  # assets, otherwise we forego any association with it so that we keep
71
85
  # your builds ultra fast, this is ideal in dev. Disable digests and
72
86
  # let us process independent so the entire site isn't regenerated
73
87
  # because of a single asset change.
88
+ # --------------------------------------------------------------------
74
89
 
75
90
  def render(context)
76
- args = @args.parse_liquid(context)
77
91
  site = context.registers[:site]
78
92
  page = context.registers.fetch(:page, {})
93
+ args = @args.parse_liquid(context)
79
94
  sprockets = site.sprockets
80
95
  page = page["path"]
81
96
 
82
97
  asset = find_asset(args, sprockets)
83
98
  add_as_jekyll_dependency(site, sprockets, page, asset)
84
99
  process_tag(args, sprockets, asset)
100
+
85
101
  rescue => e
86
- capture_and_out_error site, e
102
+ capture_and_out_error(
103
+ site, e
104
+ )
87
105
  end
88
106
 
89
- #
107
+ # --------------------------------------------------------------------
90
108
 
91
109
  private
92
110
  def from_alias(tag)
93
111
  Alias.key?(tag) ? Alias[tag] : tag
94
112
  end
95
113
 
96
- #
114
+ # --------------------------------------------------------------------
97
115
 
98
116
  private
99
117
  def process_tag(args, sprockets, asset)
@@ -102,34 +120,26 @@ module Jekyll
102
120
  build_html(args, sprockets, asset)
103
121
  end
104
122
 
105
- #
123
+ # --------------------------------------------------------------------
106
124
 
107
125
  private
108
126
  def build_html(args, sprockets, asset, path = get_path(sprockets, asset))
109
- if @tag == "asset_path"
110
- path
111
-
112
- elsif @tag == "asset" || @tag == "asset_source"
113
- asset.to_s
114
-
115
- elsif args.key?(:data) && args[:data].key?(:uri)
116
- format(Tags[@tag], asset.data_uri, \
117
- args.to_html)
118
-
119
- else
120
- format(Tags[@tag], path, \
121
- args.to_html)
122
- end
127
+ return path if @tag == "asset_path"
128
+ return asset.to_s if @tag == "asset" || @tag == "asset_source"
129
+ return format(Tags[@tag], asset.data_uri, args.to_html) if args.key?(:data) && args[:data].key?(:uri)
130
+ format(Tags[@tag], path, args.to_html)
123
131
  end
124
132
 
125
- #
133
+ # --------------------------------------------------------------------
126
134
 
127
135
  private
128
136
  def get_path(sprockets, asset)
129
- sprockets.prefix_path(sprockets.digest?? asset.digest_path : asset.logical_path)
137
+ sprockets.prefix_path(
138
+ sprockets.digest?? asset.digest_path : asset.logical_path
139
+ )
130
140
  end
131
141
 
132
- #
142
+ # --------------------------------------------------------------------
133
143
 
134
144
  private
135
145
  def add_as_jekyll_dependency(site, sprockets, page, asset)
@@ -140,34 +150,84 @@ module Jekyll
140
150
  end
141
151
  end
142
152
 
143
- #
153
+ # --------------------------------------------------------------------
144
154
 
145
155
  private
146
156
  def find_asset(args, sprockets)
147
- file = args[:file]
148
- sprockets_ = args[:sprockets] ||= {}
149
- if !(out = sprockets.find_asset(file, sprockets_))
150
- raise AssetNotFoundError, args[:file]
157
+ out = _find_asset(args[:file],
158
+ args[:sprockets] ||= {}, sprockets
159
+ )
160
+
161
+ if !out
162
+ raise(
163
+ AssetNotFoundError, args[
164
+ :file
165
+ ]
166
+ )
167
+
151
168
  else
152
169
  out.liquid_tags << self
153
- !args.proxies?? out : ProxiedAsset.new( \
154
- out, args, sprockets, self)
170
+ !args.proxies?? out : ProxiedAsset.new(
171
+ out, args, sprockets, self
172
+ )
155
173
  end
156
174
  end
157
175
 
176
+ # --------------------------------------------------------------------
177
+
178
+ private
179
+ def _find_asset(file, args, sprockets)
180
+ if args.empty? then sprockets.manifest.find(file).first
181
+ elsif args.size == 1 && args.key?(:accept)
182
+ if File.extname(file) == ""
183
+ file = file + _ext_for(args[
184
+ :accept
185
+ ])
186
+ end
187
+
188
+ sprockets.manifest.find(file).find do |asset|
189
+ asset.content_type == args[
190
+ :accept
191
+ ]
192
+ end
193
+ else
194
+ sprockets.find_asset(
195
+ file, args
196
+ )
197
+ end
198
+ end
199
+
200
+ # --------------------------------------------------------------------
201
+
202
+ private
203
+ def _ext_for(type)
204
+ out = Sprockets.mime_exts.select do |k, v|
205
+ v == type
206
+ end
207
+
208
+ out.keys \
209
+ .first
210
+ end
211
+
212
+ # --------------------------------------------------------------------
158
213
  # There is no guarantee that Jekyll will pass on the error for some
159
214
  # reason (unless you are just booting up) so we capture that error and
160
215
  # always output it, it can lead to some double errors but I would
161
216
  # rather there be a double error than no error.
217
+ # --------------------------------------------------------------------
162
218
 
163
219
  private
164
220
  def capture_and_out_error(site, error)
165
221
  if error.is_a?(Sass::SyntaxError)
166
222
  file = error.sass_filename.gsub(/#{Regexp.escape(site.source)}\//, "")
167
- Jekyll.logger.error(%{Error in #{file}:#{error.sass_line} #{error}})
223
+ Jekyll.logger.error(%(Error in #{file}:#{error.sass_line} #{
224
+ error
225
+ }))
226
+
168
227
  else
169
- Jekyll.logger.error \
228
+ Jekyll.logger.error(
170
229
  "", error.to_s
230
+ )
171
231
  end
172
232
 
173
233
  raise error
@@ -177,6 +237,8 @@ module Jekyll
177
237
  end
178
238
  end
179
239
 
240
+ # ----------------------------------------------------------------------------
241
+
180
242
  Jekyll::Assets::Liquid::Tag::AcceptableTags.each do |tag|
181
243
  Liquid::Template.register_tag tag, Jekyll::Assets::Liquid::Tag
182
244
  end