tgfa-jekyll-assets 0.7.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.rubocop.yml +78 -0
- data/.travis.yml +9 -0
- data/.yardopts +1 -0
- data/Gemfile +15 -0
- data/Gemfile.jekyll-1.0 +2 -0
- data/Guardfile +8 -0
- data/HISTORY.md +202 -0
- data/LICENSE +22 -0
- data/README.md +569 -0
- data/Rakefile +9 -0
- data/lib/jekyll/assets_plugin/asset_path.rb +39 -0
- data/lib/jekyll/assets_plugin/configuration.rb +87 -0
- data/lib/jekyll/assets_plugin/environment.rb +62 -0
- data/lib/jekyll/assets_plugin/filters.rb +19 -0
- data/lib/jekyll/assets_plugin/patches/asset_patch.rb +68 -0
- data/lib/jekyll/assets_plugin/patches/bundled_asset_patch.rb +16 -0
- data/lib/jekyll/assets_plugin/patches/context_patch.rb +27 -0
- data/lib/jekyll/assets_plugin/patches/index_patch.rb +25 -0
- data/lib/jekyll/assets_plugin/patches/processed_asset_patch.rb +60 -0
- data/lib/jekyll/assets_plugin/patches/site_patch.rb +68 -0
- data/lib/jekyll/assets_plugin/patches.rb +1 -0
- data/lib/jekyll/assets_plugin/renderer.rb +47 -0
- data/lib/jekyll/assets_plugin/tag.rb +19 -0
- data/lib/jekyll/assets_plugin/version.rb +5 -0
- data/lib/jekyll/assets_plugin.rb +4 -0
- data/lib/jekyll-assets/bootstrap.rb +6 -0
- data/lib/jekyll-assets/bourbon.rb +4 -0
- data/lib/jekyll-assets/compass.rb +7 -0
- data/lib/jekyll-assets/font-awesome.rb +6 -0
- data/lib/jekyll-assets/neat.rb +4 -0
- data/lib/jekyll-assets.rb +2 -0
- data/spec/fixtures/.gitignore +2 -0
- data/spec/fixtures/_assets/app.css.erb +5 -0
- data/spec/fixtures/_assets/app.js +1 -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 +12 -0
- data/spec/fixtures/_assets/noise.png +0 -0
- data/spec/fixtures/_assets/should_be_blank.css.erb +1 -0
- data/spec/fixtures/_assets/should_fail.css.erb +1 -0
- data/spec/fixtures/_assets/vapor.css.scss +13 -0
- data/spec/fixtures/_assets/vapor.js +2 -0
- data/spec/fixtures/_assets/vendor/bourbon.css.sass +4 -0
- data/spec/fixtures/_assets/vendor/compass.css.sass +4 -0
- data/spec/fixtures/_assets/vendor/neat.css.sass +5 -0
- data/spec/fixtures/_assets/wowscript.js +0 -0
- data/spec/fixtures/_assets/wowstyle.css +0 -0
- data/spec/fixtures/_config.yml +2 -0
- data/spec/fixtures/_layouts/default.html +9 -0
- data/spec/fixtures/_posts/2012-10-19-hello-world.md +6 -0
- data/spec/fixtures/index.html +0 -0
- data/spec/lib/jekyll/assets_plugin/configuration_spec.rb +167 -0
- data/spec/lib/jekyll/assets_plugin/environment_spec.rb +22 -0
- data/spec/lib/jekyll/assets_plugin/filters_spec.rb +103 -0
- data/spec/lib/jekyll/assets_plugin/patches/site_patch_spec.rb +168 -0
- data/spec/lib/jekyll/assets_plugin/renderer_spec.rb +48 -0
- data/spec/lib/jekyll/assets_plugin/tag_spec.rb +103 -0
- data/spec/lib/jekyll-assets/bootstrap_spec.rb +8 -0
- data/spec/lib/jekyll-assets/bourbon_spec.rb +8 -0
- data/spec/lib/jekyll-assets/compass_spec.rb +8 -0
- data/spec/lib/jekyll-assets/font-awesome_spec.rb +8 -0
- data/spec/lib/jekyll-assets/neat_spec.rb +8 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/fixtures_helpers.rb +7 -0
- data/tgfa-jekyll-assets.gemspec +41 -0
- metadata +322 -0
data/README.md
ADDED
@@ -0,0 +1,569 @@
|
|
1
|
+
# Jekyll::AssetsPlugin
|
2
|
+
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/jekyll-assets.png)](http://badge.fury.io/rb/jekyll-assets)
|
4
|
+
[![Build Status](https://secure.travis-ci.org/ixti/jekyll-assets.png)](http://travis-ci.org/ixti/jekyll-assets)
|
5
|
+
[![Dependency Status](https://gemnasium.com/ixti/jekyll-assets.png)](https://gemnasium.com/ixti/jekyll-assets)
|
6
|
+
[![Code Climate](https://codeclimate.com/github/ixti/jekyll-assets.png)](https://codeclimate.com/github/ixti/jekyll-assets)
|
7
|
+
[![Coverage Status](https://coveralls.io/repos/ixti/jekyll-assets/badge.png)](https://coveralls.io/r/ixti/jekyll-assets)
|
8
|
+
|
9
|
+
Jekyll plugin, that adds Rails-alike assets pipeline, that means that:
|
10
|
+
|
11
|
+
- It allows you to write javascript/css assets in other languages such as
|
12
|
+
CoffeeScript, Sass, Less and ERB.
|
13
|
+
- It allows you to specify dependencies between your assets and automatically
|
14
|
+
concatenates them.
|
15
|
+
- It allows you to minify/compress your JavaScript and CSS assets using
|
16
|
+
compressor you like: YUI, SASS, Uglifier or no compression at all.
|
17
|
+
- It supports JavaScript templates for client-side rendering of strings or
|
18
|
+
markup. JavaScript templates have the special format extension `.jst` and are
|
19
|
+
compiled to JavaScript functions.
|
20
|
+
- Adds MD5 fingerprint suffix for _cache busting_. That means your `app.css`
|
21
|
+
will become `app-908e25f4bf641868d8683022a5b62f54.css`. See `cachebust`
|
22
|
+
configuration option for other variants.
|
23
|
+
- Produce gzipped versions of assets. See `gzip` configuration option for
|
24
|
+
details.
|
25
|
+
- [Compass][compass], [Bourbon][bourbon] and [Neat][neat] built-in support.
|
26
|
+
See "Custom Vendors" below.
|
27
|
+
|
28
|
+
[compass]: http://compass-style.org/
|
29
|
+
[bourbon]: http://bourbon.io/
|
30
|
+
[neat]: http://neat.bourbon.io/
|
31
|
+
|
32
|
+
Jekyll-Assets uses fabulous [Sprockets][sprockets] under the hood, so you may
|
33
|
+
refer to Rails guide about [Asset Pipeline][rails-guide] for detailed
|
34
|
+
information about amazing features it gives you.
|
35
|
+
|
36
|
+
*Note:* You must have an [ExecJS][extjs] supported runtime in order to use
|
37
|
+
CoffeeScript.
|
38
|
+
|
39
|
+
|
40
|
+
[rails-guide]: http://guides.rubyonrails.org/asset_pipeline.html
|
41
|
+
[sprockets]: https://github.com/sstephenson/sprockets#readme
|
42
|
+
[extjs]: https://github.com/sstephenson/execjs#readme
|
43
|
+
|
44
|
+
For a quick start check out [jekyll-assets introduction][jekyll-assets-intro]
|
45
|
+
that shows how to use it step by step. Also you might want to take a look on
|
46
|
+
[my blog sources][ixti-blog-src] as a real-world example as well.
|
47
|
+
|
48
|
+
[jekyll-assets-intro]: http://ixti.net/software/2012/12/30/unleash-mr-hyde-introduction-of-jekyll-assets.html
|
49
|
+
[ixti-blog-src]: https://github.com/ixti/ixti.github.com
|
50
|
+
|
51
|
+
|
52
|
+
## Installation
|
53
|
+
|
54
|
+
Add this line to your application's Gemfile:
|
55
|
+
|
56
|
+
gem 'tgfa-jekyll-assets'
|
57
|
+
|
58
|
+
And then execute:
|
59
|
+
|
60
|
+
$ bundle
|
61
|
+
|
62
|
+
Or install it yourself as:
|
63
|
+
|
64
|
+
$ gem install tgfa-jekyll-assets
|
65
|
+
|
66
|
+
|
67
|
+
## How to Use Jekyll-Assets
|
68
|
+
|
69
|
+
First of all make sure to require it. Common practice is to add following line
|
70
|
+
into `_plugins/ext.rb` file:
|
71
|
+
|
72
|
+
``` ruby
|
73
|
+
require "jekyll-assets"
|
74
|
+
```
|
75
|
+
|
76
|
+
Once plugin installed, you'll have following Liquid tags available:
|
77
|
+
|
78
|
+
- `{% javascript app %}`: Generates `<script>` tag for `app.js`
|
79
|
+
- `{% stylesheet app %}`: Generates `<link>` tag for `app.css`
|
80
|
+
- `{% image logo.png %}`: Generates `<img>` tag for `logo.png`
|
81
|
+
- `{% asset_path logo.png %}`: Returns _resulting_ URL for `logo.png`
|
82
|
+
- `{% asset app.css %}`: Returns _compiled_ body of `app.css`
|
83
|
+
|
84
|
+
Also you'll have complimentary Liquid filters as well:
|
85
|
+
|
86
|
+
- `{{ 'app' | javascript }}`: Generates `<script>` tag for `app.js`
|
87
|
+
- `{{ 'app' | stylesheet }}`: Generates `<link>` tag for `app.css`
|
88
|
+
- `{{ 'logo.png' | image }}`: Generates `<img>` tag for `logo.png`
|
89
|
+
- `{{ 'logo.png' | asset_path }}`: Returns _resulting_ URL for `logo.png`
|
90
|
+
- `{{ 'app.css' | asset }}`: Returns _compiled_ body of `app.css`
|
91
|
+
|
92
|
+
Filters are used mostly to render tag (or asset source) using variable that
|
93
|
+
holds value of asset logical path rather than specifiyng it directly. Here's
|
94
|
+
an example that speaks for itself:
|
95
|
+
|
96
|
+
```
|
97
|
+
{% if page.custom_css %}{{ page.custom_css | stylesheet }}{% endif %}
|
98
|
+
```
|
99
|
+
|
100
|
+
All compiled assets will be stored under `assets/` dir of generated site.
|
101
|
+
|
102
|
+
Pipeline assets should be under your sources directory of Jekyll site. When a
|
103
|
+
file is referenced with liquid tag or with helper from another asset, Sprockets
|
104
|
+
searches the three default asset locations for it: `_assets/images`,
|
105
|
+
`_assets/javascripts` and `_assets/stylesheets`.
|
106
|
+
|
107
|
+
For example these files:
|
108
|
+
|
109
|
+
```
|
110
|
+
_assets/stylesheets/app.css
|
111
|
+
_assets/javascripts/app.js
|
112
|
+
_assets/javascripts/vendor/jquery.js
|
113
|
+
```
|
114
|
+
|
115
|
+
would be referenced like this:
|
116
|
+
|
117
|
+
``` html
|
118
|
+
{% stylesheet app %}
|
119
|
+
{% javascript app %}
|
120
|
+
{% javascript vendor/jquery %}
|
121
|
+
```
|
122
|
+
|
123
|
+
You might want to require `vendor/jquery.js` into your `app.js`. To do so, just
|
124
|
+
put following line in the beginning of your `app.js` to get it concatenated:
|
125
|
+
|
126
|
+
``` javascript
|
127
|
+
//= require vendor/jquery
|
128
|
+
|
129
|
+
$(function () {
|
130
|
+
alert('I love BIG BOOKS!');
|
131
|
+
});
|
132
|
+
```
|
133
|
+
|
134
|
+
If you want to use CoffeScript, just add `.coffee` suffix to the file you want
|
135
|
+
and you're good to go. For example, here's how your `app.js.coffe` might look
|
136
|
+
like:
|
137
|
+
|
138
|
+
``` coffeescript
|
139
|
+
#= require vendor/jquery
|
140
|
+
|
141
|
+
$ ->
|
142
|
+
alert 'I love BIG BOOKS! And small ones too!'
|
143
|
+
```
|
144
|
+
|
145
|
+
Notice, that `vendor/jquery` is not required to be coffee script. You can easily
|
146
|
+
mix CoffeeScript and vanilla JavaScript, CSS and SCSS and SASS and LESS. The
|
147
|
+
difference is only in comments styles used with _directives_.
|
148
|
+
|
149
|
+
See detailed information about these _directives_ below.
|
150
|
+
|
151
|
+
You might also want your stylesheets and javascripts to be minified. In this
|
152
|
+
case just install the `uglifier` gem and any other gems you will be using, e.g.
|
153
|
+
`sass`, `coffee-script`. Then add following lines into your `config.yml`:
|
154
|
+
|
155
|
+
``` yaml
|
156
|
+
assets:
|
157
|
+
js_compressor: uglifier
|
158
|
+
css_compressor: sass
|
159
|
+
```
|
160
|
+
|
161
|
+
If you want to use YUI compressor for minification, install `yui-compressor`
|
162
|
+
gem and put `yui` in place of `uglifier` and/or `sass` in the config file.
|
163
|
+
You can also define and use your own compressor, see "Custom Compressors".
|
164
|
+
|
165
|
+
Let's go crazy now! Assume you want your blog's `body` background color to be
|
166
|
+
white all the time, but red if you compiled your web-site in December. Just add
|
167
|
+
`.erb` suffix extension and you can use ruby in your asset like this:
|
168
|
+
|
169
|
+
```
|
170
|
+
// file: _assets/stylesheets/app.css.sass.erb
|
171
|
+
|
172
|
+
body
|
173
|
+
background-color: <%= (12 == Date.today.month) ? "red" : "white" %>
|
174
|
+
```
|
175
|
+
|
176
|
+
Want more? Sure, here you are. You can use JavaScript templating with EJS or ECO
|
177
|
+
for example. Create a file `_assets/javascripts/hello.jst.ejs` with following
|
178
|
+
contents:
|
179
|
+
|
180
|
+
``` html
|
181
|
+
<p>Hello, <span><%= name %></span>!</p>
|
182
|
+
<p><%= info %></p>
|
183
|
+
```
|
184
|
+
|
185
|
+
Then use it in your `app.js` file like this:
|
186
|
+
|
187
|
+
``` coffeescript
|
188
|
+
#= require vendor/jquery
|
189
|
+
#= require hello
|
190
|
+
|
191
|
+
$ ->
|
192
|
+
$("body").html JST["hello"]
|
193
|
+
name: "ixti"
|
194
|
+
info: "I love BIG BOOKS! And small ones too!"
|
195
|
+
```
|
196
|
+
|
197
|
+
Finally, you might want to store your assets on [Amazon S3][amazon-s3] or any
|
198
|
+
CDN service you like. As said previously, all compiled/processed assets got
|
199
|
+
special MD5 checksum appended to their original filenames. So, for example,
|
200
|
+
your `app.js.coffee` will become something like:
|
201
|
+
|
202
|
+
app-4f41243847da693a4f356c0486114bc6.js
|
203
|
+
|
204
|
+
By default, generated URLs will have `/assets/` prefixes, but you will want to
|
205
|
+
change this if you are going to host assets somewhere else. This can be easily
|
206
|
+
changed via configuration:
|
207
|
+
|
208
|
+
``` yaml
|
209
|
+
assets:
|
210
|
+
baseurl: //my.super-cool-cdn.com/
|
211
|
+
```
|
212
|
+
|
213
|
+
[amazon-s3]: http://aws.amazon.com/s3
|
214
|
+
|
215
|
+
|
216
|
+
### Custom Compressors
|
217
|
+
|
218
|
+
Sprockets comes with good set of preconfigured compressors, but imagine you are
|
219
|
+
not satisfied with default settings. For example you want to strip all comments
|
220
|
+
but copyrights info. In this case you can define and use your own compressor.
|
221
|
+
|
222
|
+
To do so, first let's define new compressor in `_plugins/ext.rb`:
|
223
|
+
|
224
|
+
``` ruby
|
225
|
+
require "jekyll-assets"
|
226
|
+
require "sprockets"
|
227
|
+
|
228
|
+
Sprockets.register_compressor 'application/javascript',
|
229
|
+
:my_uglifier, Uglifier.new(:comments => :copyright)
|
230
|
+
```
|
231
|
+
|
232
|
+
Once it's done, just tell assets to use `my_uglifier` as js compressor:
|
233
|
+
|
234
|
+
``` yaml
|
235
|
+
assets:
|
236
|
+
js_compressor: my_uglifier
|
237
|
+
```
|
238
|
+
|
239
|
+
|
240
|
+
### Compilation Cache
|
241
|
+
|
242
|
+
To improve build time, you can enabled compiled assets cache:
|
243
|
+
|
244
|
+
``` yaml
|
245
|
+
assets:
|
246
|
+
cache: true
|
247
|
+
```
|
248
|
+
|
249
|
+
This will keep cache of compiled assets in `.jekyll-assets-cache` under source
|
250
|
+
of your jekyl site. If you want to use different location specify it instead of
|
251
|
+
`true`, in this case it should be an absolute path or path relative to source
|
252
|
+
path of your jekyl site.
|
253
|
+
|
254
|
+
|
255
|
+
## Custom Vendors
|
256
|
+
|
257
|
+
Sometimes you would like to have some 3rd-party vendors. For this purposes,
|
258
|
+
normally all you have to do is to override default assets sources in config:
|
259
|
+
|
260
|
+
``` yaml
|
261
|
+
assets:
|
262
|
+
sources:
|
263
|
+
- _assets/images
|
264
|
+
- _assets/javascripts
|
265
|
+
- _assets/stylesheets
|
266
|
+
- _vendors/bootstrap/stylesheets
|
267
|
+
- _vendors/bootstrap/javascripts
|
268
|
+
```
|
269
|
+
|
270
|
+
But sometimes this is not enough. For example, with compass. As jekyll-assets
|
271
|
+
uses Sprockets internally, you can simply append "global" paths into it. Just
|
272
|
+
add following line into your `_plugins/ext.rb` file:
|
273
|
+
|
274
|
+
``` ruby
|
275
|
+
require "sprockets"
|
276
|
+
|
277
|
+
Sprockets.append_path "/my/vendor"
|
278
|
+
```
|
279
|
+
|
280
|
+
That's it, now jekyll-assets will try to look for assets inside `/my/vendor`
|
281
|
+
path first.
|
282
|
+
|
283
|
+
|
284
|
+
### Built-in Vendors Support
|
285
|
+
|
286
|
+
For your comfort jekyll-assets has built-in support for some popular libraries.
|
287
|
+
|
288
|
+
|
289
|
+
#### Compass Support
|
290
|
+
|
291
|
+
Require `jekyll-assets/compass` to enable, e.g.:
|
292
|
+
|
293
|
+
``` ruby
|
294
|
+
require "jekyll-assets"
|
295
|
+
require "jekyll-assets/compass"
|
296
|
+
```
|
297
|
+
|
298
|
+
Now you can add `@import "compass"` in your SASS assets to get Compass goodies.
|
299
|
+
|
300
|
+
*Note* that if you want to use other than default Compass plugins/frameworks,
|
301
|
+
you must require them BEFORE `jekyll-assets/compass`.
|
302
|
+
|
303
|
+
|
304
|
+
#### Bootstrap Support
|
305
|
+
|
306
|
+
Require `jekyll-assets/bootstrap` to enable, e.g.:
|
307
|
+
|
308
|
+
``` ruby
|
309
|
+
require "jekyll-assets"
|
310
|
+
require "jekyll-assets/bootstrap"
|
311
|
+
```
|
312
|
+
|
313
|
+
Now you can add `@import "bootstrap"` in your SASS assets to get Bootstrap goodies.
|
314
|
+
|
315
|
+
|
316
|
+
#### Bourbon Support
|
317
|
+
|
318
|
+
Require `jekyll-assets/bourbon` to enable, e.g.:
|
319
|
+
|
320
|
+
``` ruby
|
321
|
+
require "jekyll-assets"
|
322
|
+
require "jekyll-assets/bourbon"
|
323
|
+
```
|
324
|
+
|
325
|
+
Now you can add `@import "bourbon"` in your SASS assets to get Bourbon goodies.
|
326
|
+
|
327
|
+
|
328
|
+
#### Font Awesome
|
329
|
+
|
330
|
+
Require `jekyll-assets/font-awesome` to enable, e.g.:
|
331
|
+
|
332
|
+
``` ruby
|
333
|
+
require "jekyll-assets"
|
334
|
+
require "jekyll-assets/font-awesome"
|
335
|
+
```
|
336
|
+
|
337
|
+
Now you can add `@import "font-awesome"` in your SASS assets to get Font Awesome goodies.
|
338
|
+
|
339
|
+
|
340
|
+
#### Neat Support
|
341
|
+
|
342
|
+
Require `jekyll-assets/neat` to enable, e.g.:
|
343
|
+
|
344
|
+
``` ruby
|
345
|
+
require "jekyll-assets"
|
346
|
+
require "jekyll-assets/neat"
|
347
|
+
```
|
348
|
+
|
349
|
+
Now you can add `@import "neat"` in your SASS assets to get Neat goodies.
|
350
|
+
|
351
|
+
|
352
|
+
## The Directive Processor
|
353
|
+
|
354
|
+
*Note:* This section extracted from [Sprockets][sprockets] README.
|
355
|
+
|
356
|
+
Sprockets runs the *directive processor* on each CSS and JavaScript
|
357
|
+
source file. The directive processor scans for comment lines beginning
|
358
|
+
with `=` in comment blocks at the top of the file.
|
359
|
+
|
360
|
+
//= require jquery
|
361
|
+
//= require jquery-ui
|
362
|
+
//= require backbone
|
363
|
+
//= require_tree .
|
364
|
+
|
365
|
+
The first word immediately following `=` specifies the directive
|
366
|
+
name. Any words following the directive name are treated as
|
367
|
+
arguments. Arguments may be placed in single or double quotes if they
|
368
|
+
contain spaces, similar to commands in the Unix shell.
|
369
|
+
|
370
|
+
**Note**: Non-directive comment lines will be preserved in the final
|
371
|
+
asset, but directive comments are stripped after
|
372
|
+
processing. Sprockets will not look for directives in comment blocks
|
373
|
+
that occur after the first line of code.
|
374
|
+
|
375
|
+
|
376
|
+
### Supported Comment Types
|
377
|
+
|
378
|
+
The directive processor understands comment blocks in three formats:
|
379
|
+
|
380
|
+
/* Multi-line comment blocks (CSS, SCSS, JavaScript)
|
381
|
+
*= require foo
|
382
|
+
*/
|
383
|
+
|
384
|
+
// Single-line comment blocks (SCSS, JavaScript)
|
385
|
+
//= require foo
|
386
|
+
|
387
|
+
# Single-line comment blocks (CoffeeScript)
|
388
|
+
#= require foo
|
389
|
+
|
390
|
+
|
391
|
+
### Sprockets Directives
|
392
|
+
|
393
|
+
You can use the following directives to declare dependencies in asset
|
394
|
+
source files.
|
395
|
+
|
396
|
+
For directives that take a *path* argument, you may specify either a
|
397
|
+
logical path or a relative path. Relative paths begin with `./` and
|
398
|
+
reference files relative to the location of the current file.
|
399
|
+
|
400
|
+
#### The `require` Directive
|
401
|
+
|
402
|
+
`require` *path* inserts the contents of the asset source file
|
403
|
+
specified by *path*. If the file is required multiple times, it will
|
404
|
+
appear in the bundle only once.
|
405
|
+
|
406
|
+
#### The `include` Directive
|
407
|
+
|
408
|
+
`include` *path* works like `require`, but inserts the contents of the
|
409
|
+
specified source file even if it has already been included or
|
410
|
+
required.
|
411
|
+
|
412
|
+
#### The `require_directory` Directive
|
413
|
+
|
414
|
+
`require_directory` *path* requires all source files of the same
|
415
|
+
format in the directory specified by *path*. Files are required in
|
416
|
+
alphabetical order.
|
417
|
+
|
418
|
+
#### The `require_tree` Directive
|
419
|
+
|
420
|
+
`require_tree` *path* works like `require_directory`, but operates
|
421
|
+
recursively to require all files in all subdirectories of the
|
422
|
+
directory specified by *path*.
|
423
|
+
|
424
|
+
#### The `require_self` Directive
|
425
|
+
|
426
|
+
`require_self` tells Sprockets to insert the body of the current
|
427
|
+
source file before any subsequent `require` or `include` directives.
|
428
|
+
|
429
|
+
#### The `depend_on` Directive
|
430
|
+
|
431
|
+
`depend_on` *path* declares a dependency on the given *path* without
|
432
|
+
including it in the bundle. This is useful when you need to expire an
|
433
|
+
asset's cache in response to a change in another file.
|
434
|
+
|
435
|
+
#### The `stub` Directive
|
436
|
+
|
437
|
+
`stub` *path* allows dependency to be excluded from the asset bundle.
|
438
|
+
The *path* must be a valid asset and may or may not already be part
|
439
|
+
of the bundle. Once stubbed, it is blacklisted and can't be brought
|
440
|
+
back by any other `require`.
|
441
|
+
|
442
|
+
|
443
|
+
## Configuration
|
444
|
+
|
445
|
+
You can fine-tune configuration by editing your `_config.yml`:
|
446
|
+
|
447
|
+
``` yaml
|
448
|
+
#
|
449
|
+
# Plugin: jekyll-assets
|
450
|
+
#
|
451
|
+
assets:
|
452
|
+
#
|
453
|
+
# Pathname of the destination of generated (bundled) assets relative
|
454
|
+
# to the destination of the root.
|
455
|
+
#
|
456
|
+
dirname: assets
|
457
|
+
#
|
458
|
+
# Base URL of assets paths.
|
459
|
+
#
|
460
|
+
baseurl: /assets/
|
461
|
+
#
|
462
|
+
# Pathnames where to find assets relative to the root of the site.
|
463
|
+
#
|
464
|
+
sources:
|
465
|
+
- _assets/javascripts
|
466
|
+
- _assets/stylesheets
|
467
|
+
- _assets/images
|
468
|
+
#
|
469
|
+
# Sets JS compressor. No compression by default.
|
470
|
+
# Possible variants: 'yui', 'uglifier', nil
|
471
|
+
#
|
472
|
+
js_compressor: ~
|
473
|
+
#
|
474
|
+
# Sets CSS compressor. No compression by default.
|
475
|
+
# Possible variants: 'yui', 'sass', nil
|
476
|
+
#
|
477
|
+
css_compressor: ~
|
478
|
+
#
|
479
|
+
# Sets cachebusting policy for generated assets.
|
480
|
+
#
|
481
|
+
# Possible variants:
|
482
|
+
#
|
483
|
+
# none - disables cachebusting
|
484
|
+
#
|
485
|
+
# source file: _assets/javascripts/app.css
|
486
|
+
# output file: _site/assets/javascriptis/app.css
|
487
|
+
# output URL: /assets/javascripts/app.css
|
488
|
+
#
|
489
|
+
# soft - leave filenames as-is, but `?cb=<md5>` suffix for URLs generated
|
490
|
+
# with `asset_path`, `javascript` and `stylesheet`:
|
491
|
+
#
|
492
|
+
# source file: _assets/javascripts/app.css
|
493
|
+
# output file: _site/assets/javascriptis/app.css
|
494
|
+
# output URL: /assets/javascripts/app.css?cb=4f41243847da693a4f356c0486114bc6
|
495
|
+
#
|
496
|
+
# hard - (default) injects cachebusting checksum into processed filename:
|
497
|
+
#
|
498
|
+
# source file: _assets/javascripts/app.css
|
499
|
+
# output file: _site/assets/javascriptis/app-4f41243847da693a4f356c0486114bc6.css
|
500
|
+
# output URL: /assets/javascripts/app-4f41243847da693a4f356c0486114bc6.css
|
501
|
+
#
|
502
|
+
cachebust: hard
|
503
|
+
#
|
504
|
+
# Whenever or not cache compiled assets (disabled by default).
|
505
|
+
# See `Compilation Cache` section of README for details.
|
506
|
+
#
|
507
|
+
cache: false
|
508
|
+
#
|
509
|
+
# Specifies list of MIME types that needs to have gzipped versions.
|
510
|
+
# You can set it to `false` to disable gzipping. Only javascripts and
|
511
|
+
# stylesheets are gzipped by default.
|
512
|
+
#
|
513
|
+
gzip: [ text/css, application/javascript ]
|
514
|
+
#
|
515
|
+
# Does not concatenates files requested by `javascript` and `stylesheet`
|
516
|
+
# helpers. Instead outputs multiple files in order they are required.
|
517
|
+
# Default: false
|
518
|
+
#
|
519
|
+
debug: false
|
520
|
+
#
|
521
|
+
# Configuration version. Used to force cache invalidation.
|
522
|
+
# Default: 1
|
523
|
+
#
|
524
|
+
version: 1
|
525
|
+
```
|
526
|
+
|
527
|
+
|
528
|
+
## "Th-th-th-that's all folks!"
|
529
|
+
|
530
|
+
Feel free to follow me on [twitter][twitter], chat via [jabber][jabber] or
|
531
|
+
write an [e-mail][e-mail]. :D
|
532
|
+
|
533
|
+
[twitter]: https://twitter.com/zapparov
|
534
|
+
[jabber]: xmpp://zapparov@jabber.ru
|
535
|
+
[e-mail]: mailto://ixti@member.fsf.org
|
536
|
+
|
537
|
+
|
538
|
+
## Contributing
|
539
|
+
|
540
|
+
1. Fork it
|
541
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
542
|
+
3. Commit your changes (`git commit -am 'Added some feature'`)
|
543
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
544
|
+
5. Create new Pull Request
|
545
|
+
|
546
|
+
|
547
|
+
## License
|
548
|
+
|
549
|
+
Copyright (C) 2012-2013 Aleksey V Zapparov (http://ixti.net/)
|
550
|
+
|
551
|
+
The MIT License
|
552
|
+
|
553
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
554
|
+
this software and associated documentation files (the “Software”), to deal in
|
555
|
+
the Software without restriction, including without limitation the rights to
|
556
|
+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
|
557
|
+
of the Software, and to permit persons to whom the Software is furnished to do
|
558
|
+
so, subject to the following conditions:
|
559
|
+
|
560
|
+
The above copyright notice and this permission notice shall be included in all
|
561
|
+
copies or substantial portions of the Software.
|
562
|
+
|
563
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
564
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
565
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
566
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
567
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
568
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
569
|
+
SOFTWARE.
|
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module AssetsPlugin
|
3
|
+
class AssetPath
|
4
|
+
attr_writer :anchor, :query
|
5
|
+
|
6
|
+
def initialize(asset)
|
7
|
+
asset.bundle!
|
8
|
+
@asset = asset
|
9
|
+
end
|
10
|
+
|
11
|
+
def cachebust
|
12
|
+
@cachebust ||= @asset.site.assets_config.cachebust
|
13
|
+
end
|
14
|
+
|
15
|
+
def path
|
16
|
+
:hard == cachebust && @asset.digest_path || @asset.logical_path
|
17
|
+
end
|
18
|
+
|
19
|
+
def query
|
20
|
+
query = []
|
21
|
+
|
22
|
+
query << "cb=#{@asset.digest}" if :soft == cachebust
|
23
|
+
query << @query if @query
|
24
|
+
|
25
|
+
return if query.empty?
|
26
|
+
|
27
|
+
"?" << query.join("&")
|
28
|
+
end
|
29
|
+
|
30
|
+
def anchor
|
31
|
+
"##{@anchor}" if @anchor
|
32
|
+
end
|
33
|
+
|
34
|
+
def to_s
|
35
|
+
"#{@asset.site.assets_config.baseurl}/#{path}#{query}#{anchor}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# stdlib
|
2
|
+
require "ostruct"
|
3
|
+
|
4
|
+
module Jekyll
|
5
|
+
module AssetsPlugin
|
6
|
+
class Configuration
|
7
|
+
DEFAULTS = {
|
8
|
+
:dirname => "assets",
|
9
|
+
:sources => %w[_assets/javascripts
|
10
|
+
_assets/stylesheets
|
11
|
+
_assets/images],
|
12
|
+
:js_compressor => nil,
|
13
|
+
:css_compressor => nil,
|
14
|
+
:cachebust => :hard,
|
15
|
+
:cache => false,
|
16
|
+
:gzip => %w[text/css application/javascript],
|
17
|
+
:debug => false,
|
18
|
+
:version => 1
|
19
|
+
}.freeze
|
20
|
+
|
21
|
+
def initialize(config = {})
|
22
|
+
@data = OpenStruct.new DEFAULTS.merge(config)
|
23
|
+
|
24
|
+
@data.sources = [@data.sources] if @data.sources.is_a? String
|
25
|
+
@data.dirname = @data.dirname.gsub(%r{^/+|/+$}, "")
|
26
|
+
|
27
|
+
compress = OpenStruct.new @data.compress
|
28
|
+
|
29
|
+
@data.js_compressor ||= compress.js
|
30
|
+
@data.css_compressor ||= compress.css
|
31
|
+
@data.cache ||= @data.cache_assets
|
32
|
+
|
33
|
+
# if baseurl not given - autoguess base on dirname
|
34
|
+
@data.baseurl ||= "/#{@data.dirname}/".squeeze "/"
|
35
|
+
end
|
36
|
+
|
37
|
+
def baseurl
|
38
|
+
@data.baseurl.chomp "/"
|
39
|
+
end
|
40
|
+
|
41
|
+
def js_compressor
|
42
|
+
compressor @data.js_compressor
|
43
|
+
end
|
44
|
+
|
45
|
+
def css_compressor
|
46
|
+
compressor @data.css_compressor
|
47
|
+
end
|
48
|
+
|
49
|
+
def cachebust
|
50
|
+
return :none if none?(@data.cachebust)
|
51
|
+
return @data.cachebust.to_sym if @data.cachebust.to_s[/^(soft|hard)$/]
|
52
|
+
fail "Unknown cachebust strategy: #{@data.cachebust}"
|
53
|
+
end
|
54
|
+
|
55
|
+
def cache_assets?
|
56
|
+
@data.cache ? true : false
|
57
|
+
end
|
58
|
+
|
59
|
+
def cache_path
|
60
|
+
@data.cache.is_a?(String) ? @data.cache : ".jekyll-assets-cache"
|
61
|
+
end
|
62
|
+
|
63
|
+
def gzip
|
64
|
+
return @data.gzip if @data.gzip.is_a? Array
|
65
|
+
@data.gzip ? DEFAULTS[:gzip] : []
|
66
|
+
end
|
67
|
+
|
68
|
+
def version
|
69
|
+
@data.version
|
70
|
+
end
|
71
|
+
|
72
|
+
def method_missing(name, *args, &block)
|
73
|
+
@data.send name, *args, &block
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def none?(val)
|
79
|
+
val.to_s.empty? || "none" == val.to_s.downcase
|
80
|
+
end
|
81
|
+
|
82
|
+
def compressor(val)
|
83
|
+
none?(val) ? nil : val.to_sym
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|