octopress-ink 1.0.0 → 1.1.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 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