octopress-ink 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d332939b1e99df733a2015114dc931a31321a69c
4
- data.tar.gz: 005708978626fc44397a64f46b459141ff87e6cc
3
+ metadata.gz: e180ab69ca97fb343d48d3a0665e16ad6c5e6963
4
+ data.tar.gz: 5e700849429a751dd528724d2be1f504ff500871
5
5
  SHA512:
6
- metadata.gz: ad20725197851910e57d4f1d3f929a947c8d122345969dffa50bb2559ad51e1fe6070d01a3cd98efc98e09e13c9ce581679f1c94cd2821bf7222c2710c6413e5
7
- data.tar.gz: 0240e3c434ca6101c9b8ea35ebd6d85368ed188fcd40afb556d0c53abd34b41a4709377cd88adaf4f96eedc196d06a57643dd1f877a89615c0aa16433b1ae109
6
+ metadata.gz: 31e72d34e77edd8bee81c158b22e89f93cd9acd81d5e8c59a8f3bc5d47579cbd3f9825ed3170b1b38a5ce77317819acb4ec5798df999e8d5b0c0db717c709542
7
+ data.tar.gz: 4deec11c178c1331b3276ce878713128aac70a4afd9003ec91e67f2a1063388e38e70e58ebed2a0b75e8019fbf11f85f2fb4ca4c6cdfb44654ffdee981d5ea5b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Changelog
2
2
 
3
+ ### 1.1.0 (2015-05-03)
4
+ - New: Added support for asynchronous stylesheet loading. [#56](https://github.com/octopress/ink/pull/56)
5
+ - New: Now loading combined javascripts asynchronously by default.
6
+
3
7
  ## 1.0.0 - 2015-05-02
4
8
  - Minor: Improved styling for Octopress Ink list command output.
5
9
  - Minor: Fixed issue where changelog couldn't be processed by Octopress Docs.
@@ -0,0 +1,52 @@
1
+ /*!
2
+ loadCSS: load a CSS file asynchronously.
3
+ [c]2014 @scottjehl, Filament Group, Inc.
4
+ Licensed MIT
5
+ */
6
+
7
+ /* exported loadCSS */
8
+ function loadCSS( href, before, media, callback ){
9
+ "use strict";
10
+ // Arguments explained:
11
+ // `href` is the URL for your CSS file.
12
+ // `before` optionally defines the element we'll use as a reference for injecting our <link>
13
+ // By default, `before` uses the first <script> element in the page.
14
+ // However, since the order in which stylesheets are referenced matters, you might need a more specific location in your document.
15
+ // If so, pass a different reference element to the `before` argument and it'll insert before that instead
16
+ // note: `insertBefore` is used instead of `appendChild`, for safety re: http://www.paulirish.com/2011/surefire-dom-element-insertion/
17
+ var ss = window.document.createElement( "link" );
18
+ var ref = before || window.document.getElementsByTagName( "script" )[ 0 ];
19
+ var sheets = window.document.styleSheets;
20
+ ss.rel = "stylesheet";
21
+ ss.href = href;
22
+ // temporarily, set media to something non-matching to ensure it'll fetch without blocking render
23
+ ss.media = "only x";
24
+ // DEPRECATED
25
+ if( callback ) {
26
+ ss.onload = callback;
27
+ }
28
+
29
+ // inject link
30
+ ref.parentNode.insertBefore( ss, ref );
31
+ // This function sets the link's media back to `all` so that the stylesheet applies once it loads
32
+ // It is designed to poll until document.styleSheets includes the new sheet.
33
+ ss.onloadcssdefined = function( cb ){
34
+ var defined;
35
+ for( var i = 0; i < sheets.length; i++ ){
36
+ if( sheets[ i ].href && sheets[ i ].href.indexOf( href ) > -1 ){
37
+ defined = true;
38
+ }
39
+ }
40
+ if( defined ){
41
+ cb();
42
+ } else {
43
+ setTimeout(function() {
44
+ ss.onloadcssdefined( cb );
45
+ });
46
+ }
47
+ };
48
+ ss.onloadcssdefined(function() {
49
+ ss.media = media || "all";
50
+ });
51
+ return ss;
52
+ }
data/lib/octopress-ink.rb CHANGED
@@ -54,7 +54,7 @@ module Octopress
54
54
  'plugins' => config['plugins'],
55
55
  'theme' => config['theme'],
56
56
  'octopress' => {
57
- 'version' => version
57
+ 'version' => version,
58
58
  }
59
59
  }
60
60
 
@@ -2,8 +2,9 @@ module Octopress
2
2
  module Ink
3
3
  module Assets
4
4
  class Coffeescript < Javascript
5
- def tag
6
- %{<script src="#{Filters.expand_url(File.join(dir, File.basename(file, '.*') << '.js'))}"></script>}
5
+
6
+ def tag_path
7
+ Filters.expand_url(File.join(dir, File.basename(file, '.*') << '.js'))
7
8
  end
8
9
 
9
10
  def add
@@ -3,7 +3,11 @@ module Octopress
3
3
  module Assets
4
4
  class Javascript < Asset
5
5
  def tag
6
- %Q{<script src="#{Filters.expand_url(File.join(dir, file))}"></script>}
6
+ %Q{<script src="#{tag_path}"></script>}
7
+ end
8
+
9
+ def tag_path
10
+ Filters.expand_url(File.join(dir, file))
7
11
  end
8
12
 
9
13
  def add
@@ -27,7 +27,11 @@ module Octopress
27
27
  end
28
28
 
29
29
  def tag
30
- %Q{<link href="#{Filters.expand_url(File.join(dir, output_file_name))}" media="#{media}" rel="stylesheet" type="text/css">}
30
+ %Q{<link href="#{tag_path}" media="#{media}" rel="stylesheet" type="text/css">}
31
+ end
32
+
33
+ def tag_path
34
+ Filters.expand_url(File.join(dir, output_file_name))
31
35
  end
32
36
 
33
37
  def add
@@ -9,6 +9,8 @@ module Octopress
9
9
  'combine_js' => true,
10
10
  'compress_js' => true,
11
11
  'uglifier' => {},
12
+ 'async_css' => false,
13
+ 'async_js' => true
12
14
  },
13
15
 
14
16
  'date_format' => 'ordinal',
@@ -10,9 +10,9 @@ module Octopress
10
10
  @javascripts = nil
11
11
  @uglify_settings = nil
12
12
  @combined_js = ''
13
- @combined_stylesheets = nil
14
13
  @stylesheet_fingerprint = {}
15
14
  @javascript_fingerprint = nil
15
+ @uglify_settings ||= Jekyll::Utils.symbolize_hash_keys(Ink.configuration['asset_pipeline']['uglifier'])
16
16
  end
17
17
 
18
18
  # Compile CSS to take advantage of Sass's compression settings
@@ -55,20 +55,60 @@ module Octopress
55
55
 
56
56
  # Return a link tag, for all plugins' stylesheets
57
57
  #
58
+ def stylesheet_tag
59
+ if Ink.configuration['asset_pipeline']['async_css']
60
+ async_stylesheet_tag
61
+ else
62
+ combined_stylesheet_tag
63
+ end
64
+ end
65
+
58
66
  def combined_stylesheet_tag
59
67
  tags = ''
60
- combine_stylesheets.keys.each do |media|
61
- tags.concat "<link href='#{Filters.expand_url(combined_stylesheet_path(media))}' media='#{media}' rel='stylesheet' type='text/css'>"
68
+ combined_stylesheet_urls.each do |media, url|
69
+ tags.concat "<link href='#{url}' media='#{media}' rel='stylesheet' type='text/css'>"
62
70
  end
63
71
  tags
64
72
  end
65
73
 
66
- def combined_javascript_tag
74
+ def async_stylesheet_tag
75
+ js = uglify(File.read(Ink.gem_dir('assets','js','loadCSS.js')))
76
+ %Q{<script>#{js}\n#{load_css}\n</script>\n<noscript>#{combined_stylesheet_tag}</noscript>}
77
+ end
78
+
79
+ def load_css
80
+ script = ''
81
+ combined_stylesheet_urls.each do |media, url|
82
+ script << %Q{loadCSS("#{url}", null, "#{media}")\n}
83
+ end
84
+ script
85
+ end
86
+
87
+ def combined_stylesheet_urls
88
+ urls = {}
89
+ combine_stylesheets.keys.each do |media|
90
+ urls[media] = combined_stylesheet_url(media)
91
+ end
92
+ urls
93
+ end
94
+
95
+ def combined_stylesheet_url(media)
96
+ Filters.expand_url(combined_stylesheet_path(media))
97
+ end
98
+
99
+ def javascript_tag
67
100
  unless @combined_js == ''
68
- "<script src='#{Filters.expand_url(combined_javascript_path)}'></script>"
101
+ if Ink.configuration['asset_pipeline']['async_js']
102
+ "<script async src='#{combined_javascript_url}'></script>"
103
+ else
104
+ "<script src='#{combined_javascript_url}'></script>"
105
+ end
69
106
  end
70
107
  end
71
108
 
109
+ def combined_javascript_url
110
+ Filters.expand_url(combined_javascript_path)
111
+ end
72
112
 
73
113
  # Combine stylesheets from each plugin
74
114
  #
@@ -80,6 +120,7 @@ module Octopress
80
120
  @combined_stylesheets ||= begin
81
121
  combined = {}
82
122
 
123
+
83
124
  stylesheets.clone.each do |media,files|
84
125
  files.each do |file|
85
126
  header = "/* #{file.plugin.type.capitalize}: #{file.plugin.name} */"
@@ -148,12 +189,10 @@ module Octopress
148
189
  javascripts.each do |file|
149
190
 
150
191
  js = if compress_js?(file)
151
- @uglify_settings ||= Jekyll::Utils.symbolize_hash_keys(Ink.configuration['asset_pipeline']['uglifier'])
152
-
153
192
  if cached = Cache.read_cache(file, @uglify_settings)
154
193
  cached
155
194
  else
156
- js = Uglifier.new(@uglify_settings).compile(file.content)
195
+ js = uglify(file.content)
157
196
  Cache.write_to_cache(file, js, @uglify_settings)
158
197
  end
159
198
  else
@@ -172,6 +211,10 @@ module Octopress
172
211
  end
173
212
  end
174
213
 
214
+ def uglify(js)
215
+ Uglifier.new(@uglify_settings).compile(js)
216
+ end
217
+
175
218
  def compress_js?(file)
176
219
  Ink.configuration['asset_pipeline']['compress_js'] && !file.path.end_with?('.min.js')
177
220
  end
@@ -1,7 +1,7 @@
1
1
  module Octopress
2
2
  module Ink
3
3
  module Plugins
4
- attr_reader :registered
4
+ attr_reader :registered, :css_asset_paths, :js_asset_paths
5
5
  extend self
6
6
 
7
7
  @registered = false
@@ -150,7 +150,7 @@ module Octopress
150
150
 
151
151
  def css_tags
152
152
  if Ink.configuration['asset_pipeline']['combine_css']
153
- PluginAssetPipeline.combined_stylesheet_tag
153
+ PluginAssetPipeline.stylesheet_tag
154
154
  else
155
155
  @css_tags.join('')
156
156
  end
@@ -158,7 +158,7 @@ module Octopress
158
158
 
159
159
  def js_tags
160
160
  if Ink.configuration['asset_pipeline']['combine_js']
161
- PluginAssetPipeline.combined_javascript_tag
161
+ PluginAssetPipeline.javascript_tag
162
162
  else
163
163
  @js_tags.join('')
164
164
  end
@@ -1,5 +1,5 @@
1
1
  module Octopress
2
2
  module Ink
3
- VERSION = "1.0.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: octopress-ink
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brandon Mathis
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-02 00:00:00.000000000 Z
11
+ date: 2015-05-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -222,6 +222,7 @@ files:
222
222
  - assets/docs/index.markdown
223
223
  - assets/docs/plugin-reference.markdown
224
224
  - assets/docs/working-with-plugins.markdown
225
+ - assets/js/loadCSS.js
225
226
  - lib/octopress-ink.rb
226
227
  - lib/octopress-ink/assets.rb
227
228
  - lib/octopress-ink/assets/asset.rb