forked from alshedivat/al-folio
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Cache busting for _sass and individual files (alshedivat#1557)
Addressing alshedivat#1395 but with a different solution from alshedivat#1478, using semantic versioning based on implementation found [here](https://distresssignal.org/busting-css-cache-with-jekyll-md5-hash). Implemented a way of calculating the hash for both a single file or directory. This way we can calculate the hash for when there is a change in the `_sass` dir, for example, or in the contents of a single file. Examples of generated outputs of the plugin: ``` /al-folio/assets/css/main.css?d41d8cd98f00b204e9800998ecf8427e /al-folio/assets/js/theme.js?96d6b3e1c3604aca8b6134c7afdd5db6 /al-folio/assets/js/dark_mode.js?9b17307bb950ffa2e34be0227f53558f /al-folio/assets/js/no_defer.js?d633890033921b33e0ceb13d22340a9c /al-folio/assets/js/common.js?acdb9690d7641b2f8d40529018c71a01 /al-folio/assets/js/copy_code.js?c9d9dd48933de3831b3ee5ec9c209cac /al-folio/assets/img/prof_pic.jpg?974957d202f671e4fa6700c04e68deae ``` Signed-off-by: George Araujo <george.gcac@gmail.com>
- Loading branch information
1 parent
b0a776c
commit 0aa0ee9
Showing
7 changed files
with
75 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
# based on https://distresssignal.org/busting-css-cache-with-jekyll-md5-hash | ||
# https://gist.github.com/BryanSchuetz/2ee8c115096d7dd98f294362f6a667db | ||
module Jekyll | ||
module CacheBust | ||
class CacheDigester | ||
require 'digest/md5' | ||
require 'pathname' | ||
|
||
attr_accessor :file_name, :directory | ||
|
||
def initialize(file_name:, directory: nil) | ||
self.file_name = file_name | ||
self.directory = directory | ||
end | ||
|
||
def digest! | ||
[file_name, '?', Digest::MD5.hexdigest(file_contents)].join | ||
end | ||
|
||
private | ||
|
||
def directory_files_content | ||
target_path = File.join(directory, '**', '*') | ||
Dir[target_path].map{|f| File.read(f) unless File.directory?(f) }.join | ||
end | ||
|
||
def file_content | ||
local_file_name = file_name.slice((file_name.index('assets/')..-1)) | ||
File.read(local_file_name) | ||
end | ||
|
||
def file_contents | ||
is_directory? ? file_content : directory_files_content | ||
end | ||
|
||
def is_directory? | ||
directory.nil? | ||
end | ||
end | ||
|
||
def bust_file_cache(file_name) | ||
CacheDigester.new(file_name: file_name, directory: nil).digest! | ||
end | ||
|
||
def bust_css_cache(file_name) | ||
CacheDigester.new(file_name: file_name, directory: 'assets/_sass').digest! | ||
end | ||
end | ||
end | ||
|
||
Liquid::Template.register_filter(Jekyll::CacheBust) |