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.
- checksums.yaml +4 -4
- data/README.md +79 -9
- data/lib/jekyll-assets.rb +4 -0
- data/lib/jekyll/assets.rb +14 -15
- data/lib/jekyll/assets/addons.rb +10 -0
- data/lib/jekyll/assets/addons/autoprefixer.rb +4 -0
- data/lib/jekyll/assets/addons/bootstrap.rb +4 -0
- data/lib/jekyll/assets/addons/compass.rb +4 -0
- data/lib/jekyll/assets/addons/font_awesome.rb +4 -0
- data/lib/jekyll/assets/addons/js_es6.rb +4 -0
- data/lib/jekyll/assets/addons/proxies/magick.rb +57 -27
- data/lib/jekyll/assets/cached.rb +4 -0
- data/lib/jekyll/assets/config.rb +7 -3
- data/lib/jekyll/assets/env.rb +68 -107
- data/lib/jekyll/assets/hook.rb +19 -12
- data/lib/jekyll/assets/hooks.rb +19 -0
- data/lib/jekyll/assets/hooks/cache.rb +4 -0
- data/lib/jekyll/assets/hooks/compression.rb +4 -0
- data/lib/jekyll/assets/hooks/configuration.rb +4 -0
- data/lib/jekyll/assets/hooks/context_patches.rb +5 -0
- data/lib/jekyll/assets/hooks/disable_erb.rb +4 -0
- data/lib/jekyll/assets/hooks/helpers.rb +4 -0
- data/lib/jekyll/assets/hooks/jekyll/asset_drops.rb +7 -0
- data/lib/jekyll/assets/hooks/jekyll/ignore.rb +9 -0
- data/lib/jekyll/{hooks → assets/hooks/jekyll}/initialize.rb +4 -0
- data/lib/jekyll/{hooks → assets/hooks/jekyll}/write_assets.rb +4 -0
- data/lib/jekyll/assets/hooks/logger.rb +4 -0
- data/lib/jekyll/assets/hooks/sources.rb +5 -1
- data/lib/jekyll/assets/hooks/sprockets.rb +4 -0
- data/lib/jekyll/assets/hooks/version.rb +5 -1
- data/lib/jekyll/assets/liquid.rb +13 -0
- data/lib/jekyll/assets/liquid/drop.rb +59 -0
- data/lib/jekyll/assets/liquid/filters.rb +16 -1
- data/lib/jekyll/assets/liquid/tag.rb +61 -37
- data/lib/jekyll/assets/liquid/tag/defaults.rb +18 -0
- data/lib/jekyll/assets/liquid/tag/defaults/image.rb +51 -0
- data/lib/jekyll/assets/liquid/tag/parser.rb +56 -28
- data/lib/jekyll/assets/liquid/tag/proxied_asset.rb +14 -12
- data/lib/jekyll/assets/liquid/tag/proxies.rb +28 -24
- data/lib/jekyll/assets/logger.rb +13 -13
- data/lib/jekyll/assets/patches.rb +8 -0
- data/lib/jekyll/assets/patches/jekyll/cleaner.rb +4 -0
- data/lib/jekyll/assets/patches/jekyll/site.rb +4 -0
- data/lib/jekyll/assets/patches/kernel.rb +8 -0
- data/lib/jekyll/assets/patches/sprockets/asset.rb +6 -2
- data/lib/jekyll/assets/version.rb +5 -1
- metadata +33 -11
- data/lib/jekyll/assets/patches/hash.rb +0 -5
@@ -0,0 +1,18 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Assets
|
3
|
+
module Liquid
|
4
|
+
class Tag
|
5
|
+
module Defaults
|
6
|
+
require_relative "defaults/image"
|
7
|
+
|
8
|
+
module_function
|
9
|
+
def set_defaults_for!(tag, args, asset)
|
10
|
+
constants.select { |const| const_get(const).is_for?(tag) }.each do |const|
|
11
|
+
const_get(const).new(args, asset).set!
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Assets
|
3
|
+
module Liquid
|
4
|
+
class Tag
|
5
|
+
module Defaults
|
6
|
+
class Image
|
7
|
+
def self.is_for?(tag)
|
8
|
+
tag == "img" || tag == "image"
|
9
|
+
end
|
10
|
+
|
11
|
+
#
|
12
|
+
|
13
|
+
def initialize(args, asset)
|
14
|
+
@asset = asset
|
15
|
+
@args = args
|
16
|
+
end
|
17
|
+
|
18
|
+
#
|
19
|
+
|
20
|
+
def set!
|
21
|
+
set_img_dimensions
|
22
|
+
set_img_alt
|
23
|
+
end
|
24
|
+
|
25
|
+
#
|
26
|
+
|
27
|
+
private
|
28
|
+
def set_img_alt
|
29
|
+
@args[:html] ||= {}
|
30
|
+
if !@args[:html].has_key?("alt")
|
31
|
+
then @args[:html]["alt"] = @asset.logical_path
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
|
37
|
+
private
|
38
|
+
def set_img_dimensions
|
39
|
+
dimensions = FastImage.new(@asset.filename).size
|
40
|
+
return unless dimensions
|
41
|
+
@args[:html] ||= {}
|
42
|
+
|
43
|
+
@args[:html][ "width"] ||= dimensions.first
|
44
|
+
@args[:html]["height"] ||= dimensions. last
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# Frozen-string-literal: true
|
2
|
+
# Copyright: 2012-2015 - MIT License
|
3
|
+
# Encoding: utf-8
|
4
|
+
|
1
5
|
require_relative "proxies"
|
2
6
|
require "forwardable"
|
3
7
|
|
@@ -5,7 +9,6 @@ module Jekyll
|
|
5
9
|
module Assets
|
6
10
|
module Liquid
|
7
11
|
|
8
|
-
# -----------------------------------------------------------------------
|
9
12
|
# Examples:
|
10
13
|
# - {% tag value argument:value %}
|
11
14
|
# - {% tag value "argument:value" %}
|
@@ -13,27 +16,27 @@ module Jekyll
|
|
13
16
|
# - {% tag value argument:value\:with\:colon %}
|
14
17
|
# - {% tag value argument:"I can even escape \\: here too!" %}
|
15
18
|
# - {% tag value proxy:key:value %}
|
16
|
-
# -----------------------------------------------------------------------
|
17
19
|
|
18
20
|
class Tag
|
19
21
|
class Parser
|
20
22
|
attr_reader :args, :raw_args
|
21
23
|
extend Forwardable
|
22
24
|
|
23
|
-
def_delegator :@args, :
|
25
|
+
def_delegator :@args, :each
|
24
26
|
def_delegator :@args, :has_key?
|
25
|
-
def_delegator :@args, :fetch_or_store
|
26
27
|
def_delegator :@args, :fetch
|
27
28
|
def_delegator :@args, :store
|
29
|
+
def_delegator :@args, :to_h
|
30
|
+
def_delegator :@args, :[]=
|
28
31
|
def_delegator :@args, :[]
|
29
32
|
|
30
|
-
#
|
33
|
+
#
|
31
34
|
|
32
35
|
Accept = {
|
33
36
|
"css" => "text/css", "js" => "application/javascript"
|
34
37
|
}
|
35
38
|
|
36
|
-
#
|
39
|
+
#
|
37
40
|
|
38
41
|
class UnescapedColonError < StandardError
|
39
42
|
def initialize
|
@@ -41,7 +44,7 @@ module Jekyll
|
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
44
|
-
#
|
47
|
+
#
|
45
48
|
|
46
49
|
class UnknownProxyError < StandardError
|
47
50
|
def initialize
|
@@ -49,7 +52,7 @@ module Jekyll
|
|
49
52
|
end
|
50
53
|
end
|
51
54
|
|
52
|
-
#
|
55
|
+
#
|
53
56
|
|
54
57
|
def initialize(args, tag)
|
55
58
|
@raw_args, @tags = args, tag
|
@@ -58,7 +61,14 @@ module Jekyll
|
|
58
61
|
set_accept
|
59
62
|
end
|
60
63
|
|
61
|
-
#
|
64
|
+
#
|
65
|
+
|
66
|
+
def parse_liquid!(context)
|
67
|
+
return @args unless context.is_a?(::Liquid::Context)
|
68
|
+
@args = _parse_liquid(@args, context)
|
69
|
+
end
|
70
|
+
|
71
|
+
#
|
62
72
|
|
63
73
|
def to_html
|
64
74
|
@args.fetch(:html, {}).map do |key, val|
|
@@ -67,7 +77,7 @@ module Jekyll
|
|
67
77
|
join
|
68
78
|
end
|
69
79
|
|
70
|
-
#
|
80
|
+
#
|
71
81
|
|
72
82
|
def proxies
|
73
83
|
keys = (args.keys - Proxies.base_keys - [:file, :html])
|
@@ -76,13 +86,13 @@ module Jekyll
|
|
76
86
|
end
|
77
87
|
end
|
78
88
|
|
79
|
-
#
|
89
|
+
#
|
80
90
|
|
81
91
|
def has_proxies?
|
82
92
|
proxies.any?
|
83
93
|
end
|
84
94
|
|
85
|
-
#
|
95
|
+
#
|
86
96
|
|
87
97
|
private
|
88
98
|
def parse_raw
|
@@ -92,15 +102,15 @@ module Jekyll
|
|
92
102
|
parse_col hash, key
|
93
103
|
|
94
104
|
else
|
95
|
-
hash
|
96
|
-
|
105
|
+
(hash[:html] ||= {})[key] = \
|
106
|
+
true
|
97
107
|
end
|
98
108
|
|
99
109
|
hash
|
100
110
|
end
|
101
111
|
end
|
102
112
|
|
103
|
-
#
|
113
|
+
#
|
104
114
|
|
105
115
|
private
|
106
116
|
def parse_col(hash, key)
|
@@ -111,51 +121,69 @@ module Jekyll
|
|
111
121
|
end
|
112
122
|
end
|
113
123
|
|
114
|
-
#
|
124
|
+
#
|
115
125
|
|
116
126
|
private
|
117
127
|
def as_bool_or_html(hash, key)
|
118
128
|
okey = key; key, sub_key = key
|
119
129
|
if Proxies.has?(key, @tag, "@#{sub_key}")
|
120
|
-
hash
|
121
|
-
store(sub_key.to_sym, true)
|
130
|
+
(hash[key.to_sym] ||= {})[sub_key.to_sym] = true
|
122
131
|
else
|
123
|
-
hash
|
124
|
-
|
132
|
+
(hash[:html] ||= {})[key] = \
|
133
|
+
okey[1]
|
125
134
|
end
|
126
135
|
end
|
127
136
|
|
128
|
-
#
|
137
|
+
#
|
129
138
|
|
130
139
|
private
|
131
140
|
def as_proxy(hash, key)
|
132
141
|
key, sub_key, val = key
|
133
142
|
if Proxies.has?(key, @tag, sub_key)
|
134
|
-
hash
|
135
|
-
|
143
|
+
(hash[key.to_sym] ||= {})[sub_key.to_sym] = \
|
144
|
+
val
|
145
|
+
|
136
146
|
elsif Proxies.has?(key)
|
137
147
|
raise UnknownProxyError
|
138
148
|
end
|
139
149
|
end
|
140
150
|
|
141
|
-
#
|
151
|
+
#
|
142
152
|
|
143
153
|
private
|
144
154
|
def set_accept
|
145
155
|
if Accept.has_key?(@tag) && (!@args.has_key?(:sprockets) || \
|
146
|
-
|
156
|
+
!@args[:sprockets].has_key?(:accept))
|
147
157
|
|
148
|
-
@args
|
149
|
-
|
158
|
+
(@args[:sprockets] ||= {})[:accept] = \
|
159
|
+
Accept[@tag]
|
150
160
|
end
|
151
161
|
end
|
152
162
|
|
153
|
-
#
|
163
|
+
#
|
154
164
|
|
155
165
|
private
|
156
166
|
def from_shellwords
|
157
167
|
Shellwords.shellwords(@raw_args)
|
158
168
|
end
|
169
|
+
|
170
|
+
#
|
171
|
+
|
172
|
+
def _parse_liquid(hash, context)
|
173
|
+
lqd = context.registers[:site].liquid_renderer. \
|
174
|
+
file(raw_args)
|
175
|
+
|
176
|
+
hash.inject({}) do |hsh, (key, val)|
|
177
|
+
if val.is_a?(Hash) || val.is_a?(String)
|
178
|
+
val = val.is_a?(Hash) ? _parse_liquid(val, context) : \
|
179
|
+
lqd.parse(val).render!(context)
|
180
|
+
end
|
181
|
+
|
182
|
+
hsh.update(
|
183
|
+
key => val
|
184
|
+
)
|
185
|
+
end
|
186
|
+
end
|
159
187
|
end
|
160
188
|
end
|
161
189
|
end
|
@@ -1,3 +1,7 @@
|
|
1
|
+
# Frozen-string-literal: true
|
2
|
+
# Copyright: 2012-2015 - MIT License
|
3
|
+
# Encoding: utf-8
|
4
|
+
|
1
5
|
require "forwardable"
|
2
6
|
|
3
7
|
module Jekyll
|
@@ -9,8 +13,8 @@ module Jekyll
|
|
9
13
|
extend Forwardable
|
10
14
|
|
11
15
|
def_delegator :@asset, :liquid_tags
|
16
|
+
def_delegator :@asset, :filename, :source_filename
|
12
17
|
def_delegator :@asset, :content_type
|
13
|
-
def_delegator :@asset, :filename
|
14
18
|
|
15
19
|
def initialize(asset, args, env, tag)
|
16
20
|
@env = env
|
@@ -22,41 +26,39 @@ module Jekyll
|
|
22
26
|
proxy_file
|
23
27
|
end
|
24
28
|
|
25
|
-
#
|
29
|
+
#
|
26
30
|
|
27
31
|
def cached?
|
28
32
|
@_cached
|
29
33
|
end
|
30
34
|
|
31
|
-
#
|
35
|
+
#
|
32
36
|
|
33
37
|
def source
|
34
38
|
File.binread(filename)
|
35
39
|
end
|
36
40
|
|
37
|
-
#
|
41
|
+
#
|
38
42
|
|
39
43
|
def filename
|
40
44
|
env.in_cache_dir(digest_path)
|
41
45
|
end
|
42
46
|
|
43
|
-
#
|
47
|
+
#
|
44
48
|
|
45
49
|
def digest
|
46
50
|
Digest::SHA2.hexdigest(args.proxies.to_s)
|
47
51
|
end
|
48
52
|
|
49
|
-
# -------------------------------------------------------------------
|
50
53
|
# We always digest a proxied asset so it's uniq based on what
|
51
54
|
# proxies you give us, it would be ignorant to treat it otherwise,
|
52
55
|
# we also make sure they are URL safe by digesting the args.
|
53
|
-
# -------------------------------------------------------------------
|
54
56
|
|
55
57
|
def logical_path
|
56
58
|
digest_path
|
57
59
|
end
|
58
60
|
|
59
|
-
#
|
61
|
+
#
|
60
62
|
|
61
63
|
def digest_path
|
62
64
|
name = asset.logical_path; ext = File.extname(name)
|
@@ -65,24 +67,24 @@ module Jekyll
|
|
65
67
|
}"
|
66
68
|
end
|
67
69
|
|
68
|
-
#
|
70
|
+
#
|
69
71
|
|
70
72
|
def write_to(name)
|
71
73
|
File.binwrite(name, source)
|
72
74
|
end
|
73
75
|
|
74
|
-
#
|
76
|
+
#
|
75
77
|
|
76
78
|
private
|
77
79
|
def proxy_file
|
78
80
|
unless cached?
|
79
81
|
args.proxies.each do |key, val|
|
80
|
-
Proxies.get(key).first
|
82
|
+
Proxies.get(key).first[:class].new(self, val, @args).process
|
81
83
|
end
|
82
84
|
end
|
83
85
|
end
|
84
86
|
|
85
|
-
#
|
87
|
+
#
|
86
88
|
|
87
89
|
private
|
88
90
|
def cache_file
|
@@ -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 Liquid
|
@@ -17,82 +21,84 @@ module Jekyll
|
|
17
21
|
all
|
18
22
|
end
|
19
23
|
|
20
|
-
#
|
24
|
+
#
|
21
25
|
|
22
26
|
def self.add(name, tag, *args, &block)
|
23
27
|
add_by_class(*generate_class(name, tag, &block), *args)
|
24
28
|
end
|
25
29
|
|
26
|
-
#
|
30
|
+
#
|
27
31
|
|
28
32
|
def self.keys
|
29
|
-
all.select { |val| !val
|
30
|
-
|
33
|
+
all.select { |val| !val[:class].is_a?(Symbol) }.map do |val|
|
34
|
+
val[:name]
|
31
35
|
end. \
|
32
36
|
flatten
|
33
37
|
end
|
34
38
|
|
35
|
-
#
|
39
|
+
#
|
36
40
|
|
37
41
|
def self.base_keys
|
38
|
-
all.select { |val| val
|
39
|
-
|
42
|
+
all.select { |val| val[:class].is_a?(Symbol) }.map do |val|
|
43
|
+
val[:name]
|
40
44
|
end. \
|
41
45
|
flatten
|
42
46
|
end
|
43
47
|
|
44
|
-
#
|
48
|
+
#
|
45
49
|
|
46
50
|
def self.has?(name, tag = nil, arg = nil)
|
47
51
|
get(name, tag, arg).any?
|
48
52
|
end
|
49
53
|
|
50
|
-
#
|
54
|
+
#
|
51
55
|
|
52
56
|
def self.get(name, tag = nil, arg = nil)
|
53
57
|
if name && tag && arg
|
54
58
|
get_by_name_and_tag_and_arg(
|
55
59
|
name, tag, arg
|
56
60
|
)
|
61
|
+
|
57
62
|
elsif name && tag
|
58
63
|
get_by_name_and_tag(
|
59
64
|
name, tag
|
60
65
|
)
|
66
|
+
|
61
67
|
else
|
62
68
|
all.select do |val|
|
63
|
-
val
|
69
|
+
val[:name].include?(name)
|
64
70
|
end
|
65
71
|
end
|
66
72
|
end
|
67
73
|
|
68
|
-
#
|
74
|
+
#
|
69
75
|
|
70
76
|
def self.get_by_name_and_tag_and_arg(name, tag, arg)
|
71
77
|
all.select do |val|
|
72
|
-
(val
|
73
|
-
(val
|
74
|
-
val
|
75
|
-
(val
|
78
|
+
(val[:name].include?(name)) && \
|
79
|
+
(val[:tags].include?(:all) || \
|
80
|
+
val[:tags].include?(tag)) && \
|
81
|
+
(val[:args].include?( arg))
|
76
82
|
end
|
77
83
|
end
|
78
84
|
|
79
|
-
#
|
85
|
+
#
|
80
86
|
|
81
87
|
def self.get_by_name_and_tag(name, tag)
|
82
88
|
all.select do |val|
|
83
|
-
(val
|
84
|
-
(val
|
85
|
-
val
|
89
|
+
(val[:name].include?(name)) &&
|
90
|
+
(val[:tags].include?(:all) || \
|
91
|
+
val[:tags].include?(tag))
|
86
92
|
end
|
87
93
|
end
|
88
94
|
|
89
|
-
#
|
95
|
+
#
|
90
96
|
|
91
97
|
def self.all
|
92
98
|
@_all ||= Set.new
|
93
99
|
end
|
94
100
|
|
95
|
-
#
|
101
|
+
#
|
96
102
|
|
97
103
|
private
|
98
104
|
def self.generate_class(name, tag, &block)
|
@@ -101,15 +107,13 @@ module Jekyll
|
|
101
107
|
return _class, name, tag
|
102
108
|
end
|
103
109
|
|
104
|
-
#
|
110
|
+
#
|
105
111
|
|
106
112
|
private
|
107
113
|
def self.random_name
|
108
114
|
(0...12).map { ("a".."z").to_a.values_at(rand(26)) }.join.capitalize
|
109
115
|
end
|
110
116
|
|
111
|
-
# -------------------------------------------------------------------
|
112
|
-
|
113
117
|
# TODO: Put in a better place.
|
114
118
|
add_by_class :internal, :data, :all, ["@uri"]
|
115
119
|
add_by_class :internal, :sprockets, :all, [
|