jekyll-assets 2.1.3 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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