jekyll-simple-assets 0.1.0 → 0.2.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
  SHA256:
3
- metadata.gz: 95843e3923fd2624c717ab799fe08f4497bd7c7d55febc86b5dd3bbf7ec9d6e7
4
- data.tar.gz: 0e93ea72b7a5b06521ec61a7a8264120d1221c0e98a5a86ed426340c188f431f
3
+ metadata.gz: bbe1fbd068c7784ca4ed4d4ea3777ef10c45a6ed3b960d9fcfdcb843bdff8a1d
4
+ data.tar.gz: 44b828531c73f697e539740ee38389626d8aa7560316c2fdff63c663b3a26592
5
5
  SHA512:
6
- metadata.gz: 4307d2592ab2f9885305b2fe23b8fdcdfe86f9e2d2edc41212ba7f1de32b756b054d7fc20273666b64120aac11bdc9256abba9d0d0372a32fa10966d0d798182
7
- data.tar.gz: ebcd8ed79fb7d17969a669928fa2e90c957c7f83dbccd6942676d952cb33e00596f483a37cef191e9c1624170511af235ad1888d3a53afb2ce8b3ff64e1794ea
6
+ metadata.gz: 7749e0e9835f7891e154438f8dddff62be167d2d1ac1102a6c1c999485f653a1b4b7ef057b7983bd630605306d75245c66e9f0b7667b19be178d09079c353c29
7
+ data.tar.gz: 447cfa3bb7e120ae5c9626e25124202932c6e7c66e8fbeb948d2ab749225850391a346aeb25919e69fd702fbc250f1c06548fc2292e2937f28d3170bd6aadcac
data/README.md CHANGED
@@ -12,11 +12,11 @@ webpack.
12
12
 
13
13
  #### contenthash
14
14
 
15
- Returns an (md5) hash based on the contents of the path given.
15
+ Returns a base64 encoded md5 hash based on the contents of the path given.
16
16
 
17
17
  ```liquid
18
18
  {% contenthash assets/js/app.js %}
19
- // 329CF90732DF0C89EF8FB0B7E9416FE3
19
+ // Mpz5BzLfDInvj7C36UFv4w==
20
20
  ```
21
21
 
22
22
  #### asset
@@ -26,7 +26,7 @@ the file as a query string.
26
26
 
27
27
  ```liquid
28
28
  {% asset assets/js/app.js %}
29
- // /assets/js/app.js?v=329CF90732DF0C89EF8FB0B7E9416FE3
29
+ // /assets/js/app.js?v=Mpz5BzLfDInvj7C36UFv4w==
30
30
  ```
31
31
 
32
32
  #### bundle
@@ -64,3 +64,23 @@ How the content hashes work is by generating a placeholder string that is
64
64
  passed to the template. Once all of the sites files and pages have been
65
65
  processed and copied over, the content hashes are worked out, and the
66
66
  placeholder string in the pages output is replaced with the hash.
67
+
68
+ Because of this you need to be careful with using capture tags around or trying
69
+ to manipulate the output of the contenthash or asset tags.
70
+
71
+ By default the generation of content hashes is only enabled for production
72
+ builds (if JEKYLL_ENV is set to 'production').
73
+
74
+ ## Configuration
75
+
76
+ ```
77
+ simple_assets:
78
+ # If set to true generation of content hashes will be enabled, even in a non
79
+ # production build.
80
+ # default: false
81
+ hashing_enabled: true
82
+
83
+ # The length of the content hashes generated.
84
+ # default: 16
85
+ hash_length: 8
86
+ ```
@@ -5,6 +5,22 @@ require 'pathname'
5
5
 
6
6
  module Jekyll
7
7
  module SimpleAssets
8
+ def self.site (site)
9
+ @@site ||= site
10
+ end
11
+
12
+ def self.config
13
+ @@config ||= @@site.config['simple_assets']
14
+ end
15
+
16
+ def self.hash_length
17
+ config['hash_length'] || 16
18
+ end
19
+
20
+ def self.hashing_enabled?
21
+ config['hashing_enabled'] || ENV['JEKYLL_ENV'] == 'production'
22
+ end
23
+
8
24
  module SimpleAssetsFilters
9
25
  def md5 (input)
10
26
  Digest::MD5.hexdigest(input)
@@ -13,13 +29,13 @@ module Jekyll
13
29
 
14
30
  class BundleTag < Jekyll::Tags::IncludeTag
15
31
  def tag_includes_dirs(context)
16
- [ "_js", "_assets" ].freeze
32
+ [ "_js", "_javascript", "_assets" ].freeze
17
33
  end
18
34
  end
19
35
 
20
36
  class BundleRawTag < Jekyll::Tags::IncludeTag
21
37
  def tag_includes_dirs(context)
22
- [ "_js", "_assets" ].freeze
38
+ [ "_js", "_javascript", "_assets" ].freeze
23
39
  end
24
40
 
25
41
  def render(context)
@@ -35,9 +51,7 @@ module Jekyll
35
51
 
36
52
  return unless File.file? path
37
53
 
38
- begin
39
- content = File.read path
40
- end
54
+ content = File.read path
41
55
 
42
56
  content
43
57
  end
@@ -56,11 +70,11 @@ module Jekyll
56
70
  end
57
71
 
58
72
  def self.get_placeholder (asset_path)
59
- asset_placeholder_map[asset_path] ||= Digest::MD5.hexdigest(asset_path)
73
+ asset_placeholder_map[asset_path] ||= Digest::MD5.base64digest(asset_path)
60
74
  end
61
75
 
62
- def self.relative_url (site, path)
63
- "#{ site.config['baseurl'] }/#{ path }".gsub(%r{/{2,}}, '/')
76
+ def self.relative_url (path)
77
+ "#{ @@site.config['baseurl'] || '' }/#{ path }".gsub(%r{/{2,}}, '/')
64
78
  end
65
79
 
66
80
  class AssetTag < Liquid::Tag
@@ -91,7 +105,8 @@ module Jekyll
91
105
  end
92
106
 
93
107
  def render (context)
94
- site = context.registers[:site]
108
+ site = SimpleAssets::site(context.registers[:site])
109
+
95
110
  page = context.environments.first['page']
96
111
 
97
112
  args = Shellwords.split(@text)
@@ -100,18 +115,24 @@ module Jekyll
100
115
 
101
116
  asset_path = get_value(context, args[0]).sub(/^\//, '')
102
117
 
103
- if ENV['JEKYLL_ENV'] == 'production'
118
+ if SimpleAssets::hashing_enabled?
104
119
  SimpleAssets::page_assets_map[page_path] ||= {}
105
120
  SimpleAssets::page_assets_map[page_path][asset_path] ||= {}
106
121
  SimpleAssets::page_assets_map[page_path][asset_path][@type] ||= []
107
122
 
108
123
  placeholder = SimpleAssets::get_placeholder(asset_path)
109
124
 
110
- SimpleAssets::page_assets_map[page_path][asset_path][@type] << placeholder
125
+ unless SimpleAssets::page_assets_map[page_path][asset_path][@type].include? placeholder
126
+ SimpleAssets::page_assets_map[page_path][asset_path][@type] << placeholder
127
+ end
111
128
 
112
129
  "#{ @type }::#{ placeholder }"
113
130
  else
114
- SimpleAssets::relative_url(site, asset_path)
131
+ if @type == 'path'
132
+ SimpleAssets::relative_url(asset_path)
133
+ else
134
+ placeholder[0, SimpleAssets::hash_length]
135
+ end
115
136
  end
116
137
  end
117
138
  end
@@ -161,7 +182,11 @@ module Jekyll
161
182
  Jekyll.logger.warn "SimpleAssets", "#{ asset_path } has no content"
162
183
  end
163
184
 
164
- SimpleAssets::asset_contenthash_map[asset_path] = Digest::MD5.hexdigest(content)
185
+ base64hash = Digest::MD5.base64digest(content)
186
+
187
+ hash = base64hash[0, SimpleAssets::hash_length]
188
+
189
+ SimpleAssets::asset_contenthash_map[asset_path] = hash
165
190
  end
166
191
 
167
192
  def self.replace_placeholders_for_asset (doc, site)
@@ -181,16 +206,12 @@ module Jekyll
181
206
  if type == 'path'
182
207
  replacement = "#{ asset_path }?v=#{ replacement }"
183
208
 
184
- replacement = SimpleAssets::relative_url(site, replacement)
209
+ replacement = SimpleAssets::relative_url(replacement)
185
210
  end
186
211
 
187
212
  placeholder = "#{ type }::#{ SimpleAssets::asset_placeholder_map[asset_path] }"
188
213
 
189
- if placeholders.size > 1
190
- doc.output = doc.output.gsub(placeholder, replacement)
191
- else
192
- doc.output = doc.output.sub(placeholder, replacement)
193
- end
214
+ doc.output = doc.output.gsub(placeholder, replacement)
194
215
  end
195
216
  end
196
217
  end
@@ -205,27 +226,29 @@ Liquid::Template.register_tag('bundle_raw', Jekyll::SimpleAssets::BundleRawTag)
205
226
 
206
227
  Liquid::Template.register_filter(Jekyll::SimpleAssets::SimpleAssetsFilters)
207
228
 
208
- if ENV['JEKYLL_ENV'] == 'production'
209
- Jekyll::Hooks.register :site, :post_render do |site, payload|
210
- potential_assets = []
229
+ Jekyll::Hooks.register :site, :post_render do |site, payload|
230
+ Jekyll::SimpleAssets::site(site)
211
231
 
212
- potential_assets += site.pages
213
- potential_assets += site.static_files
232
+ return unless Jekyll::SimpleAssets::hashing_enabled?
214
233
 
215
- potential_assets.each do |asset|
216
- Jekyll::SimpleAssets::resolve_asset_content_hashes(asset, site)
217
- end
234
+ potential_assets = []
218
235
 
219
- docs = []
236
+ potential_assets += site.pages
237
+ potential_assets += site.static_files
220
238
 
221
- site.pages.each do |doc|
222
- Jekyll::SimpleAssets::replace_placeholders_for_asset(doc, site)
223
- end
239
+ potential_assets.each do |asset|
240
+ Jekyll::SimpleAssets::resolve_asset_content_hashes(asset, site)
241
+ end
224
242
 
225
- site.collections.each do |collection_name, collection|
226
- collection.docs.each do |doc|
227
- Jekyll::SimpleAssets::replace_placeholders_for_asset(doc, site)
228
- end
243
+ docs = []
244
+
245
+ site.pages.each do |doc|
246
+ Jekyll::SimpleAssets::replace_placeholders_for_asset(doc, site)
247
+ end
248
+
249
+ site.collections.each do |collection_name, collection|
250
+ collection.docs.each do |doc|
251
+ Jekyll::SimpleAssets::replace_placeholders_for_asset(doc, site)
229
252
  end
230
253
  end
231
254
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module SimpleAssets
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-simple-assets
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sophie Askew
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-19 00:00:00.000000000 Z
11
+ date: 2020-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll