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.
- checksums.yaml +4 -4
- data/Gemfile +6 -2
- data/LICENSE +2 -2
- data/README.md +38 -31
- data/Rakefile +1 -40
- data/lib/jekyll-assets.rb +3 -1
- data/lib/jekyll/assets.rb +18 -16
- data/lib/jekyll/assets/addons.rb +3 -9
- data/lib/jekyll/assets/addons/autoprefixer.rb +6 -2
- data/lib/jekyll/assets/addons/bootstrap.rb +3 -1
- data/lib/jekyll/assets/addons/fontawesome.rb +7 -0
- data/lib/jekyll/assets/addons/{js_es6.rb → javascript.rb} +3 -1
- data/lib/jekyll/assets/addons/less.rb +9 -0
- data/lib/jekyll/assets/cached.rb +13 -2
- data/lib/jekyll/assets/config.rb +24 -14
- data/lib/jekyll/assets/env.rb +92 -40
- data/lib/jekyll/assets/hook.rb +14 -4
- data/lib/jekyll/assets/hooks.rb +5 -5
- data/lib/jekyll/assets/hooks/cache.rb +11 -3
- data/lib/jekyll/assets/hooks/compression.rb +12 -2
- data/lib/jekyll/assets/hooks/{configuration.rb → config.rb} +3 -1
- data/lib/jekyll/assets/hooks/erb.rb +15 -0
- data/lib/jekyll/assets/hooks/helpers.rb +4 -3
- data/lib/jekyll/assets/hooks/jekyll/drops.rb +3 -1
- data/lib/jekyll/assets/hooks/jekyll/setup.rb +6 -8
- data/lib/jekyll/assets/hooks/jekyll/write.rb +6 -2
- data/lib/jekyll/assets/hooks/logger.rb +6 -2
- data/lib/jekyll/assets/hooks/sources.rb +4 -1
- data/lib/jekyll/assets/hooks/sprockets.rb +3 -1
- data/lib/jekyll/assets/hooks/version.rb +6 -2
- data/lib/jekyll/assets/liquid.rb +3 -1
- data/lib/jekyll/assets/liquid/drop.rb +20 -2
- data/lib/jekyll/assets/liquid/filters.rb +13 -14
- data/lib/jekyll/assets/liquid/tag.rb +101 -39
- data/lib/jekyll/assets/liquid/tag/defaults.rb +2 -0
- data/lib/jekyll/assets/liquid/tag/defaults/image.rb +25 -5
- data/lib/jekyll/assets/liquid/tag/parser.rb +27 -19
- data/lib/jekyll/assets/liquid/tag/proxied_asset.rb +33 -20
- data/lib/jekyll/assets/liquid/tag/proxies.rb +21 -16
- data/lib/jekyll/assets/logger.rb +29 -15
- data/lib/jekyll/assets/manifest.rb +98 -0
- data/lib/jekyll/assets/patches.rb +4 -2
- data/lib/jekyll/assets/patches/jekyll/site.rb +0 -4
- data/lib/jekyll/assets/patches/kernel.rb +4 -14
- data/lib/jekyll/assets/patches/sprockets/asset.rb +10 -4
- data/lib/jekyll/assets/patches/sprockets/helpers.rb +31 -0
- data/lib/jekyll/assets/processors.rb +1 -0
- data/lib/jekyll/assets/processors/less.rb +68 -0
- data/lib/jekyll/assets/processors/liquid.rb +46 -0
- data/lib/jekyll/assets/proxies.rb +1 -0
- data/lib/jekyll/assets/proxies/magick.rb +167 -0
- data/lib/jekyll/assets/version.rb +4 -2
- metadata +52 -23
- data/lib/jekyll/assets/addons/compass.rb +0 -11
- data/lib/jekyll/assets/addons/font_awesome.rb +0 -5
- data/lib/jekyll/assets/addons/processors/liquid.rb +0 -31
- data/lib/jekyll/assets/addons/proxies/magick.rb +0 -126
- data/lib/jekyll/assets/hooks/context_patches.rb +0 -17
- data/lib/jekyll/assets/hooks/disable_erb.rb +0 -10
- data/lib/jekyll/assets/patches/jekyll/cleaner.rb +0 -15
@@ -5,8 +5,10 @@ module Jekyll
|
|
5
5
|
module Defaults
|
6
6
|
require_relative "defaults/image"
|
7
7
|
|
8
|
+
# ------------------------------------------------------------------
|
8
9
|
# TODO: In 3.0 env needs to be enforced, right now it's not
|
9
10
|
# because it's maintain 2.0 API.
|
11
|
+
# ------------------------------------------------------------------
|
10
12
|
|
11
13
|
module_function
|
12
14
|
def set_defaults_for!(tag, args, asset, env = nil)
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
1
2
|
# Frozen-string-literal: true
|
2
|
-
# Copyright: 2012-
|
3
|
+
# Copyright: 2012 - 2016 - MIT License
|
3
4
|
# Encoding: utf-8
|
5
|
+
# ----------------------------------------------------------------------------
|
4
6
|
|
5
7
|
module Jekyll
|
6
8
|
module Assets
|
@@ -12,8 +14,10 @@ module Jekyll
|
|
12
14
|
tag == "img" || tag == "image"
|
13
15
|
end
|
14
16
|
|
17
|
+
# ----------------------------------------------------------------
|
15
18
|
# TODO: In 3.0 env needs to be enforced if this is not changed,
|
16
19
|
# for now it's not enforced to maintain the 2.0 API.
|
20
|
+
# ----------------------------------------------------------------
|
17
21
|
|
18
22
|
def initialize(args, asset, env = nil)
|
19
23
|
@args = args
|
@@ -21,14 +25,16 @@ module Jekyll
|
|
21
25
|
@env = env
|
22
26
|
end
|
23
27
|
|
24
|
-
#
|
28
|
+
# ----------------------------------------------------------------
|
25
29
|
|
26
30
|
def set!
|
27
31
|
set_img_dimensions
|
28
32
|
set_img_alt
|
29
33
|
end
|
30
34
|
|
35
|
+
# ----------------------------------------------------------------
|
31
36
|
# TODO: 3.0 - Remove the `!@env`
|
37
|
+
# ----------------------------------------------------------------
|
32
38
|
|
33
39
|
private
|
34
40
|
def set_img_alt
|
@@ -40,17 +46,31 @@ module Jekyll
|
|
40
46
|
end
|
41
47
|
end
|
42
48
|
|
49
|
+
# ----------------------------------------------------------------
|
43
50
|
# TODO: 3.0 - Remove the `!@env`
|
51
|
+
# ----------------------------------------------------------------
|
44
52
|
|
45
53
|
private
|
46
54
|
def set_img_dimensions
|
47
|
-
|
55
|
+
resize_image = @env.asset_config["features"]["automatic_img_size"]
|
56
|
+
|
57
|
+
if !@env || resize_image
|
48
58
|
dimensions = FastImage.new(@asset.filename).size
|
49
59
|
return unless dimensions
|
50
60
|
@args[:html] ||= {}
|
51
61
|
|
52
|
-
|
53
|
-
|
62
|
+
if resize_image =~ /^\d+$/
|
63
|
+
width = (dimensions.first / resize_image.to_f).floor
|
64
|
+
height = (dimensions. last / resize_image.to_f).floor
|
65
|
+
|
66
|
+
else
|
67
|
+
width = dimensions.first
|
68
|
+
height = dimensions. last
|
69
|
+
end
|
70
|
+
|
71
|
+
|
72
|
+
@args[:html][ "width"] ||= width
|
73
|
+
@args[:html]["height"] ||= height
|
54
74
|
end
|
55
75
|
end
|
56
76
|
end
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
1
2
|
# Frozen-string-literal: true
|
2
|
-
# Copyright: 2012-
|
3
|
+
# Copyright: 2012 - 2016 - MIT License
|
3
4
|
# Encoding: utf-8
|
5
|
+
# ----------------------------------------------------------------------------
|
4
6
|
|
5
7
|
require_relative "proxies"
|
6
8
|
require "forwardable"
|
@@ -9,6 +11,7 @@ module Jekyll
|
|
9
11
|
module Assets
|
10
12
|
module Liquid
|
11
13
|
|
14
|
+
# ----------------------------------------------------------------------
|
12
15
|
# Examples:
|
13
16
|
# - {% tag value argument:value %}
|
14
17
|
# - {% tag value "argument:value" %}
|
@@ -16,6 +19,7 @@ module Jekyll
|
|
16
19
|
# - {% tag value argument:value\:with\:colon %}
|
17
20
|
# - {% tag value argument:"I can even escape \\: here too!" %}
|
18
21
|
# - {% tag value proxy:key:value %}
|
22
|
+
# ----------------------------------------------------------------------
|
19
23
|
|
20
24
|
class Tag
|
21
25
|
class Parser
|
@@ -30,13 +34,13 @@ module Jekyll
|
|
30
34
|
def_delegator :@args, :[]=
|
31
35
|
def_delegator :@args, :[]
|
32
36
|
|
33
|
-
#
|
37
|
+
# ------------------------------------------------------------------
|
34
38
|
|
35
39
|
ACCEPT = {
|
36
40
|
"css" => "text/css", "js" => "application/javascript"
|
37
41
|
}
|
38
42
|
|
39
|
-
#
|
43
|
+
# ------------------------------------------------------------------
|
40
44
|
|
41
45
|
class UnescapedColonError < StandardError
|
42
46
|
def initialize
|
@@ -44,7 +48,7 @@ module Jekyll
|
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
47
|
-
#
|
51
|
+
# ------------------------------------------------------------------
|
48
52
|
|
49
53
|
class UnknownProxyError < StandardError
|
50
54
|
def initialize
|
@@ -52,7 +56,7 @@ module Jekyll
|
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
|
-
#
|
59
|
+
# ------------------------------------------------------------------
|
56
60
|
|
57
61
|
def initialize(args, tag, processed: false, raw_args: nil)
|
58
62
|
if processed && raw_args
|
@@ -72,23 +76,27 @@ module Jekyll
|
|
72
76
|
end
|
73
77
|
end
|
74
78
|
|
75
|
-
#
|
79
|
+
# ------------------------------------------------------------------
|
76
80
|
|
77
81
|
def parse_liquid(context)
|
78
82
|
return self unless context.is_a?(Object::Liquid::Context)
|
79
83
|
liquid = context.registers[:site].liquid_renderer.file("(jekyll:assets)")
|
80
84
|
out = parse_hash_liquid(to_h, liquid, context)
|
81
|
-
self.class.new(out, @tag,
|
82
|
-
|
85
|
+
self.class.new(out, @tag, {
|
86
|
+
:raw_args => @raw_args,
|
87
|
+
:processed => true
|
88
|
+
})
|
83
89
|
end
|
84
90
|
|
91
|
+
# ------------------------------------------------------------------
|
92
|
+
|
85
93
|
def to_html
|
86
94
|
(self[:html] || {}).map do |key, val|
|
87
|
-
%
|
95
|
+
%( #{key}="#{val}")
|
88
96
|
end.join
|
89
97
|
end
|
90
98
|
|
91
|
-
#
|
99
|
+
# ------------------------------------------------------------------
|
92
100
|
|
93
101
|
def proxies
|
94
102
|
keys = (args.keys - Proxies.base_keys - [:file, :html])
|
@@ -97,13 +105,13 @@ module Jekyll
|
|
97
105
|
end
|
98
106
|
end
|
99
107
|
|
100
|
-
#
|
108
|
+
# ------------------------------------------------------------------
|
101
109
|
|
102
110
|
def proxies?
|
103
111
|
proxies.any?
|
104
112
|
end
|
105
113
|
|
106
|
-
#
|
114
|
+
# ------------------------------------------------------------------
|
107
115
|
|
108
116
|
private
|
109
117
|
def parse_hash_liquid(hash_, liquid, context)
|
@@ -114,7 +122,7 @@ module Jekyll
|
|
114
122
|
end
|
115
123
|
end
|
116
124
|
|
117
|
-
#
|
125
|
+
# ------------------------------------------------------------------
|
118
126
|
|
119
127
|
private
|
120
128
|
def parse_raw
|
@@ -131,17 +139,17 @@ module Jekyll
|
|
131
139
|
end
|
132
140
|
end
|
133
141
|
|
134
|
-
#
|
142
|
+
# ------------------------------------------------------------------
|
135
143
|
|
136
144
|
private
|
137
145
|
def parse_col(hash, key)
|
138
146
|
key.push(key.delete_at(-1).gsub(/\\:/, ":"))
|
139
147
|
return as_proxy hash, key if key.size == 3
|
140
|
-
return as_bool_or_html hash, key if key.size == 2
|
148
|
+
return as_bool_or_html hash, key if key.size == 2 || key.size == 1
|
141
149
|
raise UnescapedColonError
|
142
150
|
end
|
143
151
|
|
144
|
-
#
|
152
|
+
# ------------------------------------------------------------------
|
145
153
|
|
146
154
|
private
|
147
155
|
def as_bool_or_html(hash, key)
|
@@ -155,7 +163,7 @@ module Jekyll
|
|
155
163
|
end
|
156
164
|
end
|
157
165
|
|
158
|
-
#
|
166
|
+
# ------------------------------------------------------------------
|
159
167
|
|
160
168
|
private
|
161
169
|
def as_proxy(hash, key)
|
@@ -169,7 +177,7 @@ module Jekyll
|
|
169
177
|
end
|
170
178
|
end
|
171
179
|
|
172
|
-
#
|
180
|
+
# ------------------------------------------------------------------
|
173
181
|
|
174
182
|
private
|
175
183
|
def set_accept
|
@@ -181,7 +189,7 @@ module Jekyll
|
|
181
189
|
end
|
182
190
|
end
|
183
191
|
|
184
|
-
#
|
192
|
+
# ------------------------------------------------------------------
|
185
193
|
|
186
194
|
private
|
187
195
|
def from_shellwords
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
1
2
|
# Frozen-string-literal: true
|
2
|
-
# Copyright: 2012-
|
3
|
+
# Copyright: 2012 - 2016 - MIT License
|
3
4
|
# Encoding: utf-8
|
5
|
+
# ----------------------------------------------------------------------------
|
4
6
|
|
5
7
|
require "forwardable"
|
6
8
|
|
@@ -12,9 +14,14 @@ module Jekyll
|
|
12
14
|
attr_reader :args, :asset, :env
|
13
15
|
extend Forwardable
|
14
16
|
|
17
|
+
# ------------------------------------------------------------------
|
18
|
+
|
15
19
|
def_delegator :@asset, :liquid_tags
|
16
20
|
def_delegator :@asset, :filename, :source_filename
|
17
21
|
def_delegator :@asset, :content_type
|
22
|
+
def_delegator :@asset, :mtime
|
23
|
+
|
24
|
+
# ------------------------------------------------------------------
|
18
25
|
|
19
26
|
def initialize(asset, args, env, tag)
|
20
27
|
@env = env
|
@@ -26,56 +33,58 @@ module Jekyll
|
|
26
33
|
proxy_file
|
27
34
|
end
|
28
35
|
|
29
|
-
#
|
36
|
+
# ------------------------------------------------------------------
|
30
37
|
|
31
38
|
def cached?
|
32
39
|
@_cached
|
33
40
|
end
|
34
41
|
|
35
|
-
#
|
42
|
+
# ------------------------------------------------------------------
|
43
|
+
|
44
|
+
def write_to(name)
|
45
|
+
FileUtils.mkdir_p File.dirname(name)
|
46
|
+
Sprockets::PathUtils.atomic_write(name) do |f|
|
47
|
+
f.write source
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# ------------------------------------------------------------------
|
36
52
|
|
37
53
|
def source
|
38
54
|
File.binread(filename)
|
39
55
|
end
|
40
56
|
|
41
|
-
#
|
57
|
+
# ------------------------------------------------------------------
|
42
58
|
|
43
59
|
def filename
|
44
60
|
env.in_cache_dir(digest_path)
|
45
61
|
end
|
46
62
|
|
47
|
-
#
|
63
|
+
# ------------------------------------------------------------------
|
48
64
|
|
49
65
|
def digest
|
50
66
|
Digest::SHA2.hexdigest(args.proxies.to_s)
|
51
67
|
end
|
52
68
|
|
69
|
+
# ------------------------------------------------------------------
|
53
70
|
# We always digest a proxied asset so it's uniq based on what
|
54
71
|
# proxies you give us, it would be ignorant to treat it otherwise,
|
55
72
|
# we also make sure they are URL safe by digesting the args.
|
73
|
+
# ------------------------------------------------------------------
|
56
74
|
|
57
75
|
def logical_path
|
58
76
|
digest_path
|
59
77
|
end
|
60
78
|
|
61
|
-
#
|
79
|
+
# ------------------------------------------------------------------
|
62
80
|
|
63
81
|
def digest_path
|
64
82
|
name = asset.logical_path
|
65
83
|
ext = File.extname(name)
|
66
|
-
"#{
|
84
|
+
"#{name.chomp(ext)}-#{digest}#{ext}"
|
67
85
|
end
|
68
86
|
|
69
|
-
#
|
70
|
-
|
71
|
-
def write_to(name)
|
72
|
-
FileUtils.mkdir_p File.dirname(name)
|
73
|
-
Sprockets::PathUtils.atomic_write(name) do |f|
|
74
|
-
f.write source
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
#
|
87
|
+
# ------------------------------------------------------------------
|
79
88
|
|
80
89
|
private
|
81
90
|
def proxy_file
|
@@ -86,13 +95,17 @@ module Jekyll
|
|
86
95
|
end
|
87
96
|
end
|
88
97
|
|
89
|
-
#
|
98
|
+
# ------------------------------------------------------------------
|
90
99
|
|
91
100
|
private
|
92
101
|
def cache_file
|
93
102
|
@_cached = File.file?(filename)
|
94
|
-
|
95
|
-
|
103
|
+
return @_cached if @_cached
|
104
|
+
|
105
|
+
dir = File.dirname(filename)
|
106
|
+
FileUtils.mkdir_p dir unless dir == env.in_cache_dir
|
107
|
+
FileUtils.cp asset.filename, filename
|
108
|
+
true
|
96
109
|
end
|
97
110
|
end
|
98
111
|
end
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# ----------------------------------------------------------------------------
|
1
2
|
# Frozen-string-literal: true
|
2
|
-
# Copyright: 2012-
|
3
|
+
# Copyright: 2012 - 2016 - MIT License
|
3
4
|
# Encoding: utf-8
|
5
|
+
# ----------------------------------------------------------------------------
|
4
6
|
|
5
7
|
module Jekyll
|
6
8
|
module Assets
|
@@ -19,13 +21,13 @@ module Jekyll
|
|
19
21
|
all
|
20
22
|
end
|
21
23
|
|
22
|
-
#
|
24
|
+
# ------------------------------------------------------------------
|
23
25
|
|
24
26
|
def self.add(name, tag, *args, &block)
|
25
27
|
add_by_class(*generate_class(name, tag, &block), *args)
|
26
28
|
end
|
27
29
|
|
28
|
-
#
|
30
|
+
# ------------------------------------------------------------------
|
29
31
|
|
30
32
|
def self.keys
|
31
33
|
all.select { |val| !val[:class].is_a?(Symbol) }.map do |val|
|
@@ -33,7 +35,7 @@ module Jekyll
|
|
33
35
|
end.flatten
|
34
36
|
end
|
35
37
|
|
36
|
-
#
|
38
|
+
# ------------------------------------------------------------------
|
37
39
|
|
38
40
|
def self.base_keys
|
39
41
|
all.select { |val| val[:class].is_a?(Symbol) }.map do |val|
|
@@ -41,13 +43,13 @@ module Jekyll
|
|
41
43
|
end.flatten
|
42
44
|
end
|
43
45
|
|
44
|
-
#
|
46
|
+
# ------------------------------------------------------------------
|
45
47
|
|
46
48
|
def self.has?(name, tag = nil, arg = nil)
|
47
49
|
get(name, tag, arg).any?
|
48
50
|
end
|
49
51
|
|
50
|
-
#
|
52
|
+
# ------------------------------------------------------------------
|
51
53
|
|
52
54
|
def self.get(name, tag = nil, arg = nil)
|
53
55
|
if name && tag && arg then get_by_name_and_tag_and_arg(name, tag, arg)
|
@@ -61,7 +63,7 @@ module Jekyll
|
|
61
63
|
end
|
62
64
|
end
|
63
65
|
|
64
|
-
#
|
66
|
+
# ------------------------------------------------------------------
|
65
67
|
|
66
68
|
def self.get_by_name_and_tag_and_arg(name, tag, arg)
|
67
69
|
all.select do |val|
|
@@ -70,7 +72,7 @@ module Jekyll
|
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
73
|
-
#
|
75
|
+
# ------------------------------------------------------------------
|
74
76
|
|
75
77
|
def self.get_by_name_and_tag(name, tag)
|
76
78
|
all.select do |val|
|
@@ -79,33 +81,36 @@ module Jekyll
|
|
79
81
|
end
|
80
82
|
end
|
81
83
|
|
82
|
-
#
|
84
|
+
# ------------------------------------------------------------------
|
83
85
|
|
84
86
|
def self.all
|
85
87
|
@_all ||= Set.new
|
86
88
|
end
|
87
89
|
|
88
|
-
#
|
90
|
+
# ------------------------------------------------------------------
|
89
91
|
|
90
|
-
|
92
|
+
private_class_method
|
91
93
|
def self.generate_class(name, tag, &block)
|
92
94
|
class_ = const_set(random_name, Class.new)
|
93
95
|
class_.class_eval(&block)
|
94
96
|
return class_, name, tag
|
95
97
|
end
|
96
98
|
|
97
|
-
#
|
99
|
+
# ------------------------------------------------------------------
|
98
100
|
|
99
|
-
|
101
|
+
private_class_method
|
100
102
|
def self.random_name
|
101
103
|
(0...12).map { ("a".."z").to_a.values_at(rand(26)) }.join.capitalize
|
102
104
|
end
|
103
105
|
|
106
|
+
# ------------------------------------------------------------------
|
104
107
|
# TODO: Put in a better place.
|
108
|
+
# ------------------------------------------------------------------
|
109
|
+
|
105
110
|
add_by_class :internal, :data, :all, ["@uri"]
|
106
|
-
add_by_class :internal, :sprockets, :all,
|
107
|
-
|
108
|
-
|
111
|
+
add_by_class :internal, :sprockets, :all, %W(
|
112
|
+
accept write_to
|
113
|
+
)
|
109
114
|
end
|
110
115
|
end
|
111
116
|
end
|