jekyll-assets 1.0.0 → 2.0.0.pre.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +10 -10
- data/LICENSE +16 -18
- data/README.md +94 -554
- data/Rakefile +2 -8
- data/lib/jekyll/assets.rb +18 -12
- data/lib/jekyll/assets/cached.rb +12 -0
- data/lib/jekyll/assets/configuration.rb +43 -87
- data/lib/jekyll/assets/context.rb +23 -0
- data/lib/jekyll/assets/env.rb +181 -0
- data/lib/jekyll/assets/extras/es6.rb +5 -0
- data/lib/jekyll/assets/extras/font-awesome.rb +1 -0
- data/lib/jekyll/assets/extras/helpers.rb +6 -0
- data/lib/jekyll/assets/extras/prefix.rb +5 -0
- data/lib/jekyll/assets/filters.rb +9 -11
- data/lib/jekyll/assets/helpers.rb +37 -0
- data/lib/jekyll/assets/hook.rb +45 -0
- data/lib/jekyll/assets/hooks/post_read.rb +3 -0
- data/lib/jekyll/assets/hooks/post_write.rb +3 -0
- data/lib/jekyll/assets/logger.rb +25 -0
- data/lib/jekyll/assets/patches/jekyll/cleaner.rb +11 -0
- data/lib/jekyll/assets/patches/jekyll/site.rb +5 -0
- data/lib/jekyll/assets/patches/sprockets/asset.rb +13 -0
- data/lib/jekyll/assets/tag.rb +136 -9
- data/lib/jekyll/assets/tag/parser.rb +129 -0
- data/lib/jekyll/assets/tag/proxied_asset.rb +84 -0
- data/lib/jekyll/assets/tag/proxies.rb +86 -0
- data/lib/jekyll/assets/tag/proxies/magick.rb +101 -0
- data/lib/jekyll/assets/version.rb +1 -1
- metadata +59 -149
- data/.gitignore +0 -27
- data/.rspec +0 -1
- data/.rubocop.yml +0 -43
- data/.rubocop_todo.yml +0 -10
- data/.travis.yml +0 -16
- data/.yardopts +0 -1
- data/Appraisals +0 -7
- data/Guardfile +0 -7
- data/HISTORY.md +0 -297
- data/gemfiles/jekyll_2.gemfile +0 -17
- data/gemfiles/jekyll_3.gemfile +0 -17
- data/jekyll-assets.gemspec +0 -34
- data/lib/jekyll-assets.rb +0 -2
- data/lib/jekyll/assets/asset_path.rb +0 -39
- data/lib/jekyll/assets/environment.rb +0 -62
- data/lib/jekyll/assets/patches.rb +0 -1
- data/lib/jekyll/assets/patches/asset_patch.rb +0 -102
- data/lib/jekyll/assets/patches/bundled_asset_patch.rb +0 -16
- data/lib/jekyll/assets/patches/context_patch.rb +0 -31
- data/lib/jekyll/assets/patches/index_patch.rb +0 -25
- data/lib/jekyll/assets/patches/processed_asset_patch.rb +0 -59
- data/lib/jekyll/assets/patches/site_patch.rb +0 -62
- data/lib/jekyll/assets/renderer.rb +0 -122
- data/spec/fixtures/.gitignore +0 -2
- data/spec/fixtures/.jekyll-metadata +0 -0
- data/spec/fixtures/_assets/alert.js +0 -1
- data/spec/fixtures/_assets/app.css.erb +0 -5
- data/spec/fixtures/_assets/app.js +0 -1
- data/spec/fixtures/_assets/app.min.css +0 -0
- data/spec/fixtures/_assets/app.min.js +0 -0
- data/spec/fixtures/_assets/fonts/vapor.eot +0 -0
- data/spec/fixtures/_assets/fonts/vapor.svg +0 -0
- data/spec/fixtures/_assets/fonts/vapor.ttf +0 -0
- data/spec/fixtures/_assets/fonts/vapor.woff +0 -0
- data/spec/fixtures/_assets/lib/relative.css.scss +0 -12
- data/spec/fixtures/_assets/noise.png +0 -0
- data/spec/fixtures/_assets/noize.png +0 -0
- data/spec/fixtures/_assets/should_be_blank.css.erb +0 -1
- data/spec/fixtures/_assets/should_fail.css.erb +0 -1
- data/spec/fixtures/_assets/vapor.css.scss +0 -13
- data/spec/fixtures/_assets/vapor.js +0 -2
- data/spec/fixtures/_assets/vendor/with_bootstrap.css.sass +0 -1
- data/spec/fixtures/_assets/vendor/with_bourbon.css.sass +0 -4
- data/spec/fixtures/_assets/vendor/with_compass.css.sass +0 -4
- data/spec/fixtures/_assets/vendor/with_neat.css.sass +0 -5
- data/spec/fixtures/_assets/wowscript.js +0 -0
- data/spec/fixtures/_assets/wowstyle.css +0 -0
- data/spec/fixtures/_config.yml +0 -2
- data/spec/fixtures/_layouts/default.html +0 -9
- data/spec/fixtures/_posts/2012-10-19-hello-world.md +0 -6
- data/spec/fixtures/_posts/2015-02-02-duplicates.md +0 -8
- data/spec/fixtures/index.html +0 -0
- data/spec/lib/jekyll/assets/configuration_spec.rb +0 -172
- data/spec/lib/jekyll/assets/environment_spec.rb +0 -18
- data/spec/lib/jekyll/assets/filters_spec.rb +0 -112
- data/spec/lib/jekyll/assets/patches/site_patch_spec.rb +0 -176
- data/spec/lib/jekyll/assets/renderer_spec.rb +0 -286
- data/spec/lib/jekyll/assets/tag_spec.rb +0 -139
- data/spec/spec_helper.rb +0 -58
- data/spec/support/fixtures_helpers.rb +0 -7
@@ -1,122 +0,0 @@
|
|
1
|
-
# 3rd-party
|
2
|
-
require "fastimage"
|
3
|
-
|
4
|
-
module Jekyll
|
5
|
-
module Assets
|
6
|
-
class Renderer
|
7
|
-
STYLESHEET = '<link rel="stylesheet" href="%{path}"%{attrs}>'
|
8
|
-
JAVASCRIPT = '<script src="%{path}"%{attrs}></script>'
|
9
|
-
IMAGE = '<img src="%{path}"%{attrs}>'
|
10
|
-
IMAGESIZE = 'width="%d" height="%d"'
|
11
|
-
|
12
|
-
URI_RE = %r{^(?:[^:]+:)?//(?:[^./]+\.)+[^./]+/}
|
13
|
-
PARAMS_RE = / ^
|
14
|
-
\s*
|
15
|
-
(?: "(?<path>[^"]+)" | '(?<path>[^']+)' | (?<path>[^ ]+) )
|
16
|
-
(?<attrs>.*?)
|
17
|
-
(?: \[(?<options>.*)\] )?
|
18
|
-
\s*
|
19
|
-
$
|
20
|
-
/x
|
21
|
-
|
22
|
-
attr_reader :site, :path, :attrs, :options
|
23
|
-
|
24
|
-
def initialize(context, params)
|
25
|
-
@site = context.registers[:site]
|
26
|
-
|
27
|
-
match = params.strip.match PARAMS_RE
|
28
|
-
|
29
|
-
@path = match["path"]
|
30
|
-
@attrs = match["attrs"].strip
|
31
|
-
@options = match["options"].to_s.split(",").map(&:strip)
|
32
|
-
|
33
|
-
@attrs = " #{@attrs}" unless @attrs.empty?
|
34
|
-
|
35
|
-
resize!
|
36
|
-
end
|
37
|
-
|
38
|
-
def asset
|
39
|
-
@asset ||= site.assets[path]
|
40
|
-
end
|
41
|
-
|
42
|
-
def render_asset
|
43
|
-
fail "Can't render remote asset: #{path}" if remote?
|
44
|
-
asset.to_s
|
45
|
-
end
|
46
|
-
|
47
|
-
def render_asset_path
|
48
|
-
return path if remote?
|
49
|
-
site.asset_path path
|
50
|
-
end
|
51
|
-
|
52
|
-
def render_javascript
|
53
|
-
render_tag JAVASCRIPT, ".js"
|
54
|
-
end
|
55
|
-
|
56
|
-
def render_stylesheet
|
57
|
-
render_tag STYLESHEET, ".css"
|
58
|
-
end
|
59
|
-
|
60
|
-
def render_image
|
61
|
-
autosize!
|
62
|
-
render_tag IMAGE
|
63
|
-
end
|
64
|
-
|
65
|
-
private
|
66
|
-
|
67
|
-
# rubocop:disable Metrics/AbcSize
|
68
|
-
def render_tag(template, extension = "")
|
69
|
-
return format(template, :path => path, :attrs => attrs) if remote?
|
70
|
-
|
71
|
-
path << extension if extension.to_s != File.extname(path)
|
72
|
-
|
73
|
-
tags = (site.assets_config.debug ? asset.to_a : [asset]).map do |a|
|
74
|
-
format template, :path => AssetPath.new(a).to_s, :attrs => attrs
|
75
|
-
end
|
76
|
-
|
77
|
-
tags.join "\n"
|
78
|
-
end
|
79
|
-
# rubocop:enable Metrics/AbcSize
|
80
|
-
|
81
|
-
def autosize!
|
82
|
-
return unless autosize?
|
83
|
-
|
84
|
-
if remote?
|
85
|
-
width, height = FastImage.size(path)
|
86
|
-
else
|
87
|
-
width, height = FastImage.size(site.assets[path].pathname)
|
88
|
-
end
|
89
|
-
|
90
|
-
@attrs = %(#{@attrs} width="#{width}" height="#{height}")
|
91
|
-
end
|
92
|
-
|
93
|
-
def autosize?
|
94
|
-
if site.assets_config.autosize
|
95
|
-
!options.include? "no-autosize"
|
96
|
-
else
|
97
|
-
options.include? "autosize"
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def make_resize_directory!
|
102
|
-
FileUtils.mkdir_p site.assets.resize_cache_path
|
103
|
-
end
|
104
|
-
|
105
|
-
def resize!
|
106
|
-
return unless resize?
|
107
|
-
|
108
|
-
dimensions = options.grep(/resize/)[-1].split(":")[1]
|
109
|
-
|
110
|
-
@path, @asset = asset.resize(dimensions)
|
111
|
-
end
|
112
|
-
|
113
|
-
def resize?
|
114
|
-
options.grep(/resize:/).length > 0
|
115
|
-
end
|
116
|
-
|
117
|
-
def remote?
|
118
|
-
path =~ URI_RE
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
data/spec/fixtures/.gitignore
DELETED
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
alert('test');
|
@@ -1 +0,0 @@
|
|
1
|
-
//= require vapor
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -1,12 +0,0 @@
|
|
1
|
-
/* copy of vapor css framework to test relative asset inclusion*/
|
2
|
-
|
3
|
-
@font-face {
|
4
|
-
font-family: 'Vapor';
|
5
|
-
src: url(font_path('../fonts/vapor.eot'));
|
6
|
-
src: url(font_path('../fonts/vapor.eot?#iefix')) format("embedded-opentype"),
|
7
|
-
url(font_path('../fonts/vapor.woff')) format("woff"),
|
8
|
-
url(font_path('../fonts/vapor.ttf')) format("truetype"),
|
9
|
-
url(font_path('../fonts/vapor.svg#iefix')) format("svg");
|
10
|
-
font-weight: normal;
|
11
|
-
font-style: normal;
|
12
|
-
}
|
Binary file
|
Binary file
|
@@ -1 +0,0 @@
|
|
1
|
-
body { background-image: url(<%= image_path '' %>) }
|
@@ -1 +0,0 @@
|
|
1
|
-
body { background-image: url(<%= image_path 'not-found.png' %>) }
|
@@ -1,13 +0,0 @@
|
|
1
|
-
//= require wowstyle
|
2
|
-
/* vapor css framework */
|
3
|
-
|
4
|
-
@font-face {
|
5
|
-
font-family: 'Vapor';
|
6
|
-
src: url(font_path('fonts/vapor.eot'));
|
7
|
-
src: url(font_path('fonts/vapor.eot?#iefix')) format("embedded-opentype"),
|
8
|
-
url(font_path('fonts/vapor.woff')) format("woff"),
|
9
|
-
url(font_path('fonts/vapor.ttf')) format("truetype"),
|
10
|
-
url(font_path('fonts/vapor.svg#iefix')) format("svg");
|
11
|
-
font-weight: normal;
|
12
|
-
font-style: normal;
|
13
|
-
}
|
@@ -1 +0,0 @@
|
|
1
|
-
@import "bootstrap"
|
File without changes
|
File without changes
|
data/spec/fixtures/_config.yml
DELETED
data/spec/fixtures/index.html
DELETED
File without changes
|
@@ -1,172 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Jekyll::Assets::Configuration do
|
4
|
-
let(:options) { {} }
|
5
|
-
subject(:config) { described_class.new(@site, options) }
|
6
|
-
|
7
|
-
context "with defaults" do
|
8
|
-
context "output assets dirname" do
|
9
|
-
subject { config.dirname }
|
10
|
-
it { is_expected.to eq described_class::DEFAULTS[:dirname] }
|
11
|
-
end
|
12
|
-
|
13
|
-
context "assets baseurl" do
|
14
|
-
subject { config.baseurl }
|
15
|
-
it { is_expected.to eq "/" + described_class::DEFAULTS[:dirname] }
|
16
|
-
end
|
17
|
-
|
18
|
-
context "sources list" do
|
19
|
-
subject { config.sources }
|
20
|
-
it { is_expected.to match_array described_class::DEFAULTS[:sources] }
|
21
|
-
end
|
22
|
-
|
23
|
-
context "cachebust" do
|
24
|
-
subject { config.cachebust }
|
25
|
-
it { is_expected.to be :hard }
|
26
|
-
end
|
27
|
-
|
28
|
-
context "js compressor" do
|
29
|
-
subject { config.js_compressor }
|
30
|
-
it { is_expected.to be_nil }
|
31
|
-
end
|
32
|
-
|
33
|
-
context "css compressor" do
|
34
|
-
subject { config.css_compressor }
|
35
|
-
it { is_expected.to be_nil }
|
36
|
-
end
|
37
|
-
|
38
|
-
context "autosize" do
|
39
|
-
subject { config.autosize }
|
40
|
-
it { is_expected.to be false }
|
41
|
-
end
|
42
|
-
|
43
|
-
context "gzip" do
|
44
|
-
subject { config.gzip }
|
45
|
-
it { is_expected.to match_array %w(text/css application/javascript) }
|
46
|
-
end
|
47
|
-
|
48
|
-
context "cache_assets?" do
|
49
|
-
subject { config.cache_assets? }
|
50
|
-
it { is_expected.to be false }
|
51
|
-
end
|
52
|
-
|
53
|
-
context "cache_path" do
|
54
|
-
subject { config.cache_path }
|
55
|
-
it { is_expected.to eq ".jekyll-assets-cache" }
|
56
|
-
end
|
57
|
-
|
58
|
-
context "debug" do
|
59
|
-
subject { config.debug }
|
60
|
-
it { is_expected.to be false }
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
it "overrides specified options and leave defaults for missing" do
|
65
|
-
config = described_class.new(@site, {
|
66
|
-
:sources => %w(abc),
|
67
|
-
:css_compressor => "sass"
|
68
|
-
})
|
69
|
-
|
70
|
-
expect(config.dirname).to eq "assets"
|
71
|
-
expect(config.sources).to eq %w(abc)
|
72
|
-
expect(config.js_compressor).to be_nil
|
73
|
-
expect(config.css_compressor).to be :sass
|
74
|
-
end
|
75
|
-
|
76
|
-
context "#cache" do
|
77
|
-
context "when specified as String" do
|
78
|
-
let(:options) { { :cache => "/tmp/jekyll-assets" } }
|
79
|
-
|
80
|
-
it "overrides default cache path" do
|
81
|
-
expect(config.cache_path).to eq("/tmp/jekyll-assets")
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context "#baseurl" do
|
87
|
-
subject { config.baseurl }
|
88
|
-
|
89
|
-
context "when given" do
|
90
|
-
let(:options) { { :dirname => "foo", :baseurl => "/bar/" } }
|
91
|
-
it { is_expected.to eq "/bar" }
|
92
|
-
end
|
93
|
-
|
94
|
-
context "when not explicitly given" do
|
95
|
-
let(:options) { { :dirname => "foo" } }
|
96
|
-
it { is_expected.to eq "/foo" }
|
97
|
-
|
98
|
-
context "and site has baseurl config" do
|
99
|
-
before { @site.config["baseurl"] = "/blog" }
|
100
|
-
it { is_expected.to eq "/blog/foo" }
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|
105
|
-
context "#js_compressor" do
|
106
|
-
subject { config.js_compressor }
|
107
|
-
|
108
|
-
context "when js compressor is given as `uglify`" do
|
109
|
-
let(:options) { { :js_compressor => "uglify" } }
|
110
|
-
it { is_expected.to be :uglify }
|
111
|
-
end
|
112
|
-
|
113
|
-
context "otherwise" do
|
114
|
-
it { is_expected.to be_falsey }
|
115
|
-
end
|
116
|
-
end
|
117
|
-
|
118
|
-
context "#css_compressor" do
|
119
|
-
subject { config.css_compressor }
|
120
|
-
|
121
|
-
context "when css compressor is given as `sass`" do
|
122
|
-
let(:options) { { :css_compressor => "sass" } }
|
123
|
-
it { is_expected.to be :sass }
|
124
|
-
end
|
125
|
-
|
126
|
-
context "otherwise" do
|
127
|
-
it { is_expected.to be_falsey }
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
context "#gzip" do
|
132
|
-
subject { config.gzip }
|
133
|
-
|
134
|
-
context "when gzip is disabled" do
|
135
|
-
let(:options) { { :gzip => false } }
|
136
|
-
it { is_expected.to eq [] }
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
context "#version" do
|
141
|
-
let(:options) { { :version => "abc" } }
|
142
|
-
subject { config.version }
|
143
|
-
|
144
|
-
it { is_expected.to be options.fetch(:version) }
|
145
|
-
end
|
146
|
-
|
147
|
-
context "Deprecated options" do
|
148
|
-
context "compress" do
|
149
|
-
let :options do
|
150
|
-
{ :compress => { :js => "uglify", :css => "sass" } }
|
151
|
-
end
|
152
|
-
|
153
|
-
describe "#js_compressor" do
|
154
|
-
subject { config.js_compressor }
|
155
|
-
it { is_expected.to be :uglify }
|
156
|
-
end
|
157
|
-
|
158
|
-
describe "#css_compressor" do
|
159
|
-
subject { config.css_compressor }
|
160
|
-
it { is_expected.to be :sass }
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context "cache_assets" do
|
165
|
-
let(:options) { { :cache_assets => true } }
|
166
|
-
|
167
|
-
it "sets `cache` value" do
|
168
|
-
expect(config.cache_assets?).to eq true
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
RSpec.describe Jekyll::Assets::Environment do
|
4
|
-
context "#asset_path of context" do
|
5
|
-
it "properly handles query params" do
|
6
|
-
css = @site.assets["vapor.css"].to_s
|
7
|
-
expect(css).to match(/fonts\/vapor-[a-f0-9]{32}\.eot\?#iefix/)
|
8
|
-
expect(css).to match(/fonts\/vapor-[a-f0-9]{32}\.svg#iefix/)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "properly handles relative paths" do
|
12
|
-
css = @site.assets["lib/relative.css"].to_s
|
13
|
-
expect(css).to match(%r{/assets/fonts/vapor-[a-f0-9]{32}\.eot\?#iefix})
|
14
|
-
expect(css).to match(%r{/assets/fonts/vapor-[a-f0-9]{32}\.svg#iefix})
|
15
|
-
puts css
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|