jekyll-assets 2.0.0.pre.beta4 → 2.0.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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +79 -9
  3. data/lib/jekyll-assets.rb +4 -0
  4. data/lib/jekyll/assets.rb +14 -15
  5. data/lib/jekyll/assets/addons.rb +10 -0
  6. data/lib/jekyll/assets/addons/autoprefixer.rb +4 -0
  7. data/lib/jekyll/assets/addons/bootstrap.rb +4 -0
  8. data/lib/jekyll/assets/addons/compass.rb +4 -0
  9. data/lib/jekyll/assets/addons/font_awesome.rb +4 -0
  10. data/lib/jekyll/assets/addons/js_es6.rb +4 -0
  11. data/lib/jekyll/assets/addons/proxies/magick.rb +57 -27
  12. data/lib/jekyll/assets/cached.rb +4 -0
  13. data/lib/jekyll/assets/config.rb +7 -3
  14. data/lib/jekyll/assets/env.rb +68 -107
  15. data/lib/jekyll/assets/hook.rb +19 -12
  16. data/lib/jekyll/assets/hooks.rb +19 -0
  17. data/lib/jekyll/assets/hooks/cache.rb +4 -0
  18. data/lib/jekyll/assets/hooks/compression.rb +4 -0
  19. data/lib/jekyll/assets/hooks/configuration.rb +4 -0
  20. data/lib/jekyll/assets/hooks/context_patches.rb +5 -0
  21. data/lib/jekyll/assets/hooks/disable_erb.rb +4 -0
  22. data/lib/jekyll/assets/hooks/helpers.rb +4 -0
  23. data/lib/jekyll/assets/hooks/jekyll/asset_drops.rb +7 -0
  24. data/lib/jekyll/assets/hooks/jekyll/ignore.rb +9 -0
  25. data/lib/jekyll/{hooks → assets/hooks/jekyll}/initialize.rb +4 -0
  26. data/lib/jekyll/{hooks → assets/hooks/jekyll}/write_assets.rb +4 -0
  27. data/lib/jekyll/assets/hooks/logger.rb +4 -0
  28. data/lib/jekyll/assets/hooks/sources.rb +5 -1
  29. data/lib/jekyll/assets/hooks/sprockets.rb +4 -0
  30. data/lib/jekyll/assets/hooks/version.rb +5 -1
  31. data/lib/jekyll/assets/liquid.rb +13 -0
  32. data/lib/jekyll/assets/liquid/drop.rb +59 -0
  33. data/lib/jekyll/assets/liquid/filters.rb +16 -1
  34. data/lib/jekyll/assets/liquid/tag.rb +61 -37
  35. data/lib/jekyll/assets/liquid/tag/defaults.rb +18 -0
  36. data/lib/jekyll/assets/liquid/tag/defaults/image.rb +51 -0
  37. data/lib/jekyll/assets/liquid/tag/parser.rb +56 -28
  38. data/lib/jekyll/assets/liquid/tag/proxied_asset.rb +14 -12
  39. data/lib/jekyll/assets/liquid/tag/proxies.rb +28 -24
  40. data/lib/jekyll/assets/logger.rb +13 -13
  41. data/lib/jekyll/assets/patches.rb +8 -0
  42. data/lib/jekyll/assets/patches/jekyll/cleaner.rb +4 -0
  43. data/lib/jekyll/assets/patches/jekyll/site.rb +4 -0
  44. data/lib/jekyll/assets/patches/kernel.rb +8 -0
  45. data/lib/jekyll/assets/patches/sprockets/asset.rb +6 -2
  46. data/lib/jekyll/assets/version.rb +5 -1
  47. metadata +33 -11
  48. data/lib/jekyll/assets/patches/hash.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 13ef0db8827ce604b6ab6fc5c1272289aa28db82
4
- data.tar.gz: 74fa09f72ab1a1a5a5344c45c3d2a9aea781ba46
3
+ metadata.gz: 03eb71fd5a47c2e0e6751282a641078cf0073323
4
+ data.tar.gz: fe08b59368965a3972b499351cbe582604d07041
5
5
  SHA512:
6
- metadata.gz: d9ca925ddb5825511b5b79aebbff142c716b19b3bda9c2a77304d5298901dce0ff171e99cbdcbde4e94c866e94a79f23746924002e604725d6d51438e49502ab
7
- data.tar.gz: 1d22a229132e302b9101d074799f81d998f9df9befa85fa0170a02028411e6c30acc02d5980514c5983f5c84bd24a9a8b08398d06def947dbfa9acd83afb4771
6
+ metadata.gz: ab6aedd38ebadf43e71fecd4548c254afdc7143c45dcc85f32fa2e86b6295a62eab8bcb828546dfb6d97328e07acc16a899fd0cad1d8b01b18ab7d8823717854
7
+ data.tar.gz: d1b30bbebba9a6cfe9a77a7ef563088e0d168d1d83d83a4b097f9ba46b017f77229c919c98cd592ebcb54a17062529e0af414267e0a1d9317f0d704782d472b1
data/README.md CHANGED
@@ -43,7 +43,13 @@ assets:
43
43
  - "bundle.css"
44
44
  digest: true
45
45
  sources:
46
- - "_assets/folder"
46
+ - _assets/css
47
+ - _assets/images
48
+ - _assets/javascripts
49
+ - _assets/stylesheets
50
+ - _assets/fonts
51
+ - _assets/img
52
+ - _assets/js
47
53
  ```
48
54
 
49
55
  ### Digesting
@@ -57,13 +63,22 @@ assets:
57
63
  * Disable compression by default in development.
58
64
  * Enable by default in production.
59
65
 
60
- ***You can force digesting with `digest: true` in your `_config.yml`***
61
66
 
62
- ## ERB Support
67
+ ### Bower (web components support.)
63
68
 
64
- ERB Support is removed in favor of trying to get this included on Github Pages
65
- eventually (if I can.) Having ERB presents a security risk to Github because it
66
- would allow you to use Ruby in ways they don't want you to.
69
+ Modify your `.bowerrc` file and add:
70
+
71
+ ```javascript
72
+ {
73
+ "directory": "_assets/bower"
74
+ }
75
+ ```
76
+
77
+ And then add `_assets/bower` to your sources list and Sprockets will do the
78
+ the rest for you... you can even `//= require bower_asset.js`. We will even
79
+ compress them for you per normal if Sprockets supports it and allows us to.
80
+
81
+ ***You can force digesting with `digest: true` in your `_config.yml`***
67
82
 
68
83
  ## Tags
69
84
 
@@ -101,6 +116,49 @@ rules for our tags as a specification.
101
116
  * `sprockets:accept:<value>`
102
117
  * `sprockets:write_to:<value>`
103
118
 
119
+ ## Liquid Variables in Arguments
120
+
121
+ You can use Liquid variables inside of your arguments, but you must quote
122
+ them to get them to work, this can be a partial argument quote a full argument
123
+ quote or otherwise, it just must be quoted or escaped.
124
+
125
+ ```liquid
126
+ {% img '{{ image_path }}' %}
127
+ {% img '{{ image_path }}' proxy:key:'{{ value }}' %}
128
+ {% img {{\ image_path\ }} %}
129
+ ```
130
+
131
+ ## Getting a list of your assets and basic info from Liquid
132
+
133
+ We provide all *your* assets as a hash of Liquid Drops so you can get basic
134
+ info that we wish you to have access to without having to prepare the class.
135
+
136
+ ```liquid
137
+ {{ assets["bundle.css"].content_type }} => "text/css"
138
+ {{ assets["images.jpg"].width }} => 62
139
+ {{ assets["images.jpg"].height }} => 62
140
+ ```
141
+
142
+ The current list of available accessors:
143
+
144
+ * `logical_path`
145
+ * `content_type` -> `type`
146
+ * `filename`
147
+ * `basename`
148
+ * `width`
149
+ * `height`
150
+
151
+ If you would like more, please feel free to add a pull request, at this
152
+ time we will reject all pull requests that wish to add any digested paths as
153
+ those are dynamically created when a proxy is ran so we can never predict
154
+ it reliably unless we proxy and that would be a performance problem.
155
+
156
+ ## ERB Support
157
+
158
+ ERB Support is removed in favor of trying to get this included on Github Pages
159
+ eventually (if I can.) Having ERB presents a security risk to Github because it
160
+ would allow you to use Ruby in ways they don't want you to.
161
+
104
162
  ## Filters
105
163
 
106
164
  There is a full suite of filters, actually, any tag and any proxy can be a
@@ -122,6 +180,14 @@ Jekyll::Assets::Hook.register :env, :init do
122
180
  end
123
181
  ```
124
182
 
183
+ ## Sass Helpers
184
+
185
+ ***Our currently supported helpers are:***
186
+
187
+ * asset_path
188
+ * image_path
189
+ * font_path
190
+
125
191
  ## Addons
126
192
 
127
193
  * CSS Auto Prefixer - add "autoprefixer-rails" to your Gemfile.
@@ -143,9 +209,13 @@ that point rather than trying to fight it.***
143
209
  * `magick:rotate:<value>`
144
210
  * `magick:crop:<value>`
145
211
  * `magick:flip:<value>`
146
- * `magick:half`
147
- * `magick:2x`
148
- * `magick:4x`
212
+ * `magick:quadruple`, `magick:4x`
213
+ * `magick:one-third`, `magick:1/3`
214
+ * `magick:three-fourths`, `magick:3/4`
215
+ * `magick:two-fourths`, `magick:2/4`
216
+ * `magick:two-thirds`, `magick:2/3`
217
+ * `magick:one-fourth`, `magick:1/4`
218
+ * `magick:half`, `magick:1/2`
149
219
 
150
220
  ## Plugins where did they go?
151
221
 
data/lib/jekyll-assets.rb CHANGED
@@ -1 +1,5 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  require "jekyll/assets"
data/lib/jekyll/assets.rb CHANGED
@@ -1,22 +1,21 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  require "sprockets"
2
6
  require "jekyll"
3
7
 
4
- Dir.glob(File.expand_path("hooks/*.rb", __dir__)).map do |file|
5
- require file
6
- end
7
-
8
8
  module Jekyll
9
9
  module Assets
10
- %W(patches/**/* cached config env hook logger version liquid/*
11
- hooks/* addons/{*,**/*}).each do |path|
12
- if path !~ /\*/
13
- require_relative "assets/#{path}"
14
- else
15
- Dir.glob(File.expand_path("assets/#{path}.rb", __dir__)). \
16
- map do |file|
17
- require file
18
- end
19
- end
20
- end
10
+ require_relative "assets/version"
11
+ require_relative "assets/patches"
12
+ require_relative "assets/cached"
13
+ require_relative "assets/config"
14
+ require_relative "assets/env"
15
+ require_relative "assets/hook"
16
+ require_relative "assets/logger"
17
+ require_relative "assets/hooks"
18
+ require_relative "assets/liquid"
19
+ require_relative "assets/addons"
21
20
  end
22
21
  end
@@ -0,0 +1,10 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
5
+ require_relative "addons/compass"
6
+ require_relative "addons/bootstrap"
7
+ require_relative "addons/autoprefixer"
8
+ require_relative "addons/proxies/magick"
9
+ require_relative "addons/font_awesome"
10
+ require_relative "addons/js_es6"
@@ -1,3 +1,7 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  try_require_if_javascript "autoprefixer-rails" do
2
6
  Jekyll::Assets::Hook.register :env, :init do |env|
3
7
  AutoprefixerRails.install(env)
@@ -1 +1,5 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  try_require "bootstrap-sass"
@@ -1,3 +1,7 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  try_require "compass/core" do
2
6
  Jekyll::Assets::Hook.register :env, :init do
3
7
  Compass::Frameworks::ALL.each do |framework|
@@ -1 +1,5 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  try_require "font-awesome-sass"
@@ -1,3 +1,7 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  try_require_if_javascript "sprockets/es6" do
2
6
  if ExecJS.runtime.is_a?(ExecJS::RubyRhinoRuntime)
3
7
  Jekyll.logger.warn "ES6 transpiler has trouble with RubyRhino, use Node"
@@ -1,22 +1,32 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  try_require "mini_magick" do
2
- args = %W(resize quality rotate crop flip @2x @4x @half)
3
- Jekyll::Assets::Env.liquid_proxies.add :magick, :img, *args do
6
+ args = %W(resize quality rotate crop flip)
7
+ presets = %W(@2x @4x @1/2 @1/3 @2/3 @1/4 @2/4 @3/4
8
+ @double @quadruple @half @one-third @two-thirds @one-fourth
9
+ @two-fourths @three-fourths)
10
+
11
+ Jekyll::Assets::Env.liquid_proxies.add :magick, :img, *(args + presets) do
12
+ Presets, Args = presets, args
4
13
  class DoubleResizeError < RuntimeError
5
14
  def initialize
6
15
  "Both resize and @*x provided, this is not supported."
7
16
  end
8
17
  end
9
18
 
10
- # -----------------------------------------------------------------
11
19
  # @see https://github.com/minimagick/minimagick#usage -- All but
12
20
  # the boolean @ options are provided by Minimagick.
13
- # -----------------------------------------------------------------
14
21
 
15
- def initialize(asset, opts)
16
- @asset, @path, @opts = asset, asset.filename, opts
22
+ def initialize(asset, opts, args)
23
+ @path = asset.filename
24
+ @opts = opts
25
+ @asset = asset
26
+ @args = args
17
27
  end
18
28
 
19
- # ---------------------------------------------------------------
29
+ #
20
30
 
21
31
  def process
22
32
  img = MiniMagick::Image.open(@path)
@@ -31,63 +41,83 @@ try_require "mini_magick" do
31
41
  img.destroy!
32
42
  end
33
43
 
34
- # ---------------------------------------------------------------
44
+ #
45
+
46
+ private
47
+ def any_preset?(*keys)
48
+ @opts.keys.any? do |key|
49
+ keys.include?(key)
50
+ end
51
+ end
52
+
53
+ #
54
+
55
+ private
56
+ def preset?
57
+ (@opts.keys - Args.map(&:to_sym)).any?
58
+ end
59
+
60
+ #
35
61
 
36
62
  private
37
63
  def magick_quality(img)
38
64
  if @opts.has_key?(:quality)
39
- img.quality @opts.fetch(:quality)
65
+ then img.quality @opts[:quality]
40
66
  end
41
67
  end
42
68
 
43
- # ---------------------------------------------------------------
69
+ #
44
70
 
45
71
  private
46
72
  def magick_resize(img)
47
- if @opts.has_key?(:resize) && (@opts.has_key?(:"2x") || \
48
- @opts.has_key?(:"4x") || @opts.has_key?(:half))
49
- raise DoubleResizeError
50
-
51
- elsif @opts.has_key?(:resize)
52
- img.resize @opts.fetch(:resize)
73
+ raise DoubleResizeError if @opts.has_key?(:resize) && preset?
74
+ if @opts.has_key?(:resize)
75
+ then img.resize @opts[:resize]
53
76
  end
54
77
  end
55
78
 
56
- # ---------------------------------------------------------------
79
+ #
57
80
 
58
81
  private
59
82
  def magick_rotate(img)
60
83
  if @opts.has_key?(:rotate)
61
- img.rotate @opts.fetch(:rotate)
84
+ then img.rotate @opts[:rotate]
62
85
  end
63
86
  end
64
87
 
65
- # ---------------------------------------------------------------
88
+ #
66
89
 
67
90
  private
68
91
  def magick_flip(img)
69
92
  if @opts.has_key?(:flip)
70
- img.flip @opts.fetch(:flip)
93
+ then img.flip @opts[:flip]
71
94
  end
72
95
  end
73
96
 
74
- # ---------------------------------------------------------------
97
+ #
75
98
 
76
99
  private
77
100
  def magick_crop(img)
78
101
  if @opts.has_key?(:crop)
79
- img.crop @opts.fetch(:crop)
102
+ then img.crop @opts[:crop]
80
103
  end
81
104
  end
82
105
 
83
- # ---------------------------------------------------------------
106
+ # I just want you to know, we don't even care if you do multiple
107
+ # resizes or try to, we don't attempt to even attempt to attempt to care
108
+ # we expect you to be logical and if you aren't we will comply.
84
109
 
85
110
  private
86
111
  def magick_preset_resize(img)
87
- return unless @opts.has_key?(:"2x") || @opts.has_key?(:"4x") || @opts.has_key?(:half)
88
- width, height = img.width * 2, img.height * 2 if @opts.has_key?(:"2x")
89
- width, height = img.width * 4, img.height * 4 if @opts.has_key?(:"4x")
90
- width, height = img.width / 2, img.height / 2 if @opts.has_key?(:half)
112
+ return unless preset?
113
+ width, height = img.width * 4, img.height * 4 if any_preset?(:"4x", :quadruple)
114
+ width, height = img.width * 2, img.height * 2 if any_preset?(:"2x", :double)
115
+ width, height = img.width / 2, img.height / 2 if any_preset?(:"1/2", :half)
116
+ width, height = img.width / 3, img.height / 3 if any_preset?(:"1/3", :"one-third")
117
+ width, height = img.width / 4, img.height / 4 if any_preset?(:"1/4", :"one-fourth")
118
+ width, height = img.width / 3 * 2, img.height / 3 * 2 if any_preset?(:"2/3", :"two-thirds")
119
+ width, height = img.width / 4 * 2, img.height / 4 * 2 if any_preset?(:"2/4", :"two-fourths")
120
+ width, height = img.width / 4 * 3, img.height / 4 * 3 if any_preset?(:"3/4", :"three-fourths")
91
121
  img.resize "#{width}x#{height}"
92
122
  end
93
123
  end
@@ -1,3 +1,7 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  module Jekyll
2
6
  module Assets
3
7
  class Cached < Sprockets::CachedEnvironment
@@ -1,3 +1,7 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  module Jekyll
2
6
  module Assets
3
7
  module Config
@@ -20,7 +24,7 @@ module Jekyll
20
24
  ]
21
25
  }
22
26
 
23
- # -----------------------------------------------------------------------
27
+ #
24
28
 
25
29
  Production = Development.merge({
26
30
  "digest" => true,
@@ -30,13 +34,13 @@ module Jekyll
30
34
  },
31
35
  })
32
36
 
33
- # -----------------------------------------------------------------------
37
+ #
34
38
 
35
39
  def self.defaults
36
40
  %W(development test).include?(Jekyll.env) ? Development : Production
37
41
  end
38
42
 
39
- # -----------------------------------------------------------------------
43
+ #
40
44
 
41
45
  def self.merge(nhash, ohash = defaults)
42
46
  ohash.merge(nhash) do |key, oval, nval|
@@ -1,199 +1,160 @@
1
+ # Frozen-string-literal: true
2
+ # Copyright: 2012-2015 - MIT License
3
+ # Encoding: utf-8
4
+
1
5
  module Jekyll
2
6
  module Assets
3
7
  class Env < Sprockets::Environment
4
8
  attr_reader :jekyll, :used
5
9
 
6
10
  class << self
7
- attr_accessor :assets_cache, :digest_cache
8
- def digest_cache
9
- return @digest_cache ||= {}
11
+ attr_accessor :past
12
+ def liquid_proxies
13
+ return Liquid::Tag::Proxies
10
14
  end
15
+ end
11
16
 
12
- # ---------------------------------------------------------------------
17
+ #
13
18
 
14
- def liquid_proxies
15
- return Liquid::Tag::Proxies
19
+ def all_unparsed_assets
20
+ @unparsed_assets ||= logical_paths.select do |(_, val)|
21
+ val.start_with?(jekyll.in_source_dir)
16
22
  end
17
23
  end
18
24
 
19
- # -----------------------------------------------------------------------
25
+ #
20
26
 
21
- def inspect
22
- "<#{self.class.name} compress_js=#{compress?("js")} compress_css=#{compress?("css")} asset_path=#{
23
- path
24
- }>"
27
+ def to_liquid_payload
28
+ jekyll.sprockets.all_unparsed_assets.inject({}) do |hsh, (key, val)|
29
+ hsh[key] = Jekyll::Assets::Liquid::Drop.new(val, jekyll)
30
+ hsh
31
+ end
25
32
  end
26
33
 
27
- # -----------------------------------------------------------------------
34
+ #
28
35
 
29
36
  def initialize(path, jekyll = nil)
30
37
  jekyll, path = path, nil if path.is_a?(Jekyll::Site)
31
38
  @used, @jekyll = Set.new, jekyll
39
+
32
40
  path ? super(path) : super()
33
- Hook.trigger(:env, :init) do |hook|
34
- hook.arity > 0 || 0 > hook.arity ? hook.call(self) : instance_eval(&hook)
41
+ Hook.trigger :env, :init do |hook|
42
+ hook.arity > 0 || 0 > hook.arity ? hook.call(self) : \
43
+ instance_eval(&hook)
35
44
  end
36
45
  end
37
46
 
38
- # -----------------------------------------------------------------------
47
+ #
39
48
 
40
49
  def liquid_proxies
41
50
  return self.class.liquid_proxies
42
51
  end
43
52
 
44
- # -----------------------------------------------------------------------
45
53
  # Make sure a path falls withint our cache dir.
46
- # -----------------------------------------------------------------------
47
54
 
48
55
  def in_cache_dir(*paths)
49
- cache_dir = asset_config.fetch("cache", ".asset-cache") || nil
56
+ cache_dir = asset_config["cache"] || ".asset-cache"
50
57
  jekyll.in_source_dir(cache_dir, *paths)
51
58
  end
52
59
 
53
- # -----------------------------------------------------------------------
54
- # Whether or not we are writing from the cache.
55
- # -----------------------------------------------------------------------
60
+ # Merged form of `#extra_assets`
56
61
 
57
- def cached_write?
58
- !@used.any?
62
+ def all_assets
63
+ Set.new(@used).merge extra_assets
59
64
  end
60
65
 
61
- # -----------------------------------------------------------------------
62
- # Merged form of `#extra_assets` and `@used` assets.
63
- # -----------------------------------------------------------------------
64
-
65
- def all_assets(cached = false)
66
- if !cached
67
- then Set.new(@used).merge extra_assets
68
- else Set.new(self.class.assets_cache).merge(extra_assets)
69
- end
70
- end
71
-
72
- # -----------------------------------------------------------------------
73
66
  # Assets you tell us you want to always compile, even if you do not
74
67
  # use them. Just like Rails this is probably normally used.
75
- # -----------------------------------------------------------------------
76
68
 
77
69
  def extra_assets
78
- each_logical_path(*asset_config.fetch("assets", [])).map do |v|
70
+ assets = asset_config["assets"] ||= []
71
+ each_logical_path(*assets).map do |v|
79
72
  find_asset v
80
73
  end
81
74
  end
82
75
 
83
- # -----------------------------------------------------------------------
76
+ #
84
77
 
85
78
  def cdn?
86
- !dev? && asset_config.has_key?("cdn") && asset_config.fetch("cdn")
79
+ !dev? && asset_config.has_key?("cdn") && \
80
+ asset_config["cdn"]
87
81
  end
88
82
 
89
- # -----------------------------------------------------------------------
83
+ #
90
84
 
91
85
  def baseurl
92
- jekyll.config.fetch("baseurl", "")
86
+ ary = []
87
+
88
+ ary << jekyll.config["baseurl"] unless cdn? && asset_config["skip_baseurl_with_cdn"]
89
+ ary << asset_config[ "prefix"] unless cdn? && asset_config[ "skip_prefix_with_cdn"]
90
+ File.join(*ary.delete_if do |val|
91
+ val.nil? || val.empty?
92
+ end)
93
93
  end
94
94
 
95
- # -----------------------------------------------------------------------
95
+ #
96
96
 
97
97
  def dev?
98
98
  %W(development test).include?(Jekyll.env)
99
99
  end
100
100
 
101
- # -----------------------------------------------------------------------
101
+ #
102
102
 
103
103
  def compress?(what)
104
- !!asset_config.fetch("compress").fetch(what, false)
104
+ !!asset_config["compress"]. \
105
+ fetch(what, false)
105
106
  end
106
107
 
107
- # -----------------------------------------------------------------------
108
+ #
108
109
 
109
110
  def asset_config
110
- jekyll.config.fetch_or_store("assets", {})
111
+ jekyll.config["assets"] ||= {}
111
112
  end
112
113
 
113
- # -----------------------------------------------------------------------
114
+ #
114
115
 
115
116
  def digest?
116
- !!asset_config.fetch("digest")
117
+ !!asset_config["digest"]
117
118
  end
118
119
 
119
- # -----------------------------------------------------------------------
120
+ # Prefix path prefixes the path with the baseurl and the cdn if it
121
+ # exists and is in the right mode to use it. Otherwise it will only use
122
+ # the baseurl and asset prefix. All of these can be adjusted.
120
123
 
121
- def prefix
122
- asset_config.fetch("prefix", "")
123
- end
124
+ def prefix_path(path = nil)
125
+ _baseurl = baseurl
126
+ cdn = asset_config["cdn"]
127
+ _path = []
124
128
 
125
- # -----------------------------------------------------------------------
126
- # Prefixes a path with both the #base_url, the prefix and the CDN.
127
- # -----------------------------------------------------------------------
128
-
129
- def prefix_path(path = "")
130
- prefix = cdn? && asset_config.fetch( "skip_prefix_with_cdn") ? "" : self. prefix
131
- baseurl = cdn? && asset_config.fetch("skip_baseurl_with_cdn") ? "" : self.baseurl
132
- path = [baseurl, prefix, path]
133
-
134
- cdn = asset_config.fetch("cdn") if asset_config.has_key?("cdn")
135
- cdn? && cdn ? File.join(cdn, *path).chomp("/") : \
136
- File.join(*path).chomp("/")
129
+ _path << _baseurl unless _baseurl.empty?
130
+ _path << path unless path.nil?
131
+ cdn? && cdn ? File.join(cdn, *_path).chomp("/") : \
132
+ File.join(*_path).chomp("/")
137
133
  end
138
134
 
139
- # -----------------------------------------------------------------------
135
+ #
140
136
 
141
137
  def cached
142
138
  Cached.new(self)
143
139
  end
144
140
 
145
- # -----------------------------------------------------------------------
141
+ #
146
142
 
147
143
  def write_all
148
- if cached_write?
149
- write_cached_assets else write_assets
150
- end
151
- end
152
-
153
- # -----------------------------------------------------------------------
154
-
155
- private
156
- def write_assets(assets = self.all_assets)
157
- self.class.assets_cache = assets
158
- self.class.digest_cache = Hash[assets.map do |a|
159
- [a.logical_path, a.digest]
160
- end]
161
-
162
- assets.each do |v|
163
- v.write_to as_path v
164
- end
165
- end
166
-
167
- # -----------------------------------------------------------------------
168
-
169
- private
170
- def write_cached_assets(assets = all_assets(true))
171
- assets.each do |a|
172
- if !a.is_a?(Liquid::Tag::ProxiedAsset)
173
- viejo = self.class.digest_cache[a.logical_path]
174
- nuevo = find_asset(a.logical_path).digest
175
- path = as_path a
176
-
177
- if nuevo == viejo && File.file?(path)
178
- next
179
- end
180
- else
181
- if File.file?(a.logical_path)
182
- next
183
- end
144
+ past = self.class.past ||= Set.new
145
+ (@used.any?? all_assets : past).each do |obj|
146
+ if past.add(obj) && path = as_path(obj)
147
+ obj.write_to path
184
148
  end
185
-
186
- self.class.digest_cache[a.logical_path] = a.digest
187
- a.write_to as_path a
188
149
  end
189
150
  end
190
151
 
191
- # -----------------------------------------------------------------------
152
+ #
192
153
 
193
154
  private
194
155
  def as_path(v)
195
156
  path = digest?? v.digest_path : v.logical_path
196
- jekyll.in_dest_dir(File.join(prefix, path))
157
+ jekyll.in_dest_dir(File.join(asset_config[ "prefix"], path))
197
158
  end
198
159
  end
199
160
  end