diff --git a/Gemfile b/Gemfile
index eb9f5bb..e4e9405 100644
--- a/Gemfile
+++ b/Gemfile
@@ -33,3 +33,5 @@ gem "http_parser.rb", "0.8.0", :platforms => [:jruby]
# plugin dependencies
gem "webp-ffi", "0.4.0" if ENV["ENABLE_WEBP_AUTO_CONVERSION"] == "true" || ENV["DRONE"] == "true"
+gem "mini_racer", "0.20.0" if ENV["ENABLE_EMBEDDED_V8"] == "true" || ENV["DRONE"] == "true"
+gem "terser", "1.2.7"
diff --git a/_config.yml b/_config.yml
index 2f6d57e..e76e9a4 100644
--- a/_config.yml
+++ b/_config.yml
@@ -316,12 +316,6 @@ compress_html:
ignore:
envs: development
-head_scripts:
- - /assets/js/settings.js
- - /assets/js/theme.js
-after_footer_scripts:
- - /assets/js/plugins/jquery.auto-redirect.js
-
# jekyll-feed
feed:
collections:
@@ -330,3 +324,29 @@ feed:
- modpack
- eula
- multiplayer
+
+post_process:
+ terser:
+ /assets/js/main.min.js:
+ - /assets/js/settings.js
+ - /assets/js/theme.js
+ - /assets/js/meta.js
+ - /assets/js/vendor/jquery/jquery-3.6.0.js
+ - /assets/js/plugins/gumshoe.js
+ - /assets/js/plugins/jquery.ba-throttle-debounce.js
+ - /assets/js/plugins/jquery.fitvids.js
+ - /assets/js/plugins/jquery.greedy-navigation.js
+ - /assets/js/plugins/jquery.magnific-popup.js
+ - /assets/js/plugins/smooth-scroll.js
+ - /assets/js/plugins/jquery.auto-redirect.js
+ - /assets/js/_main.js
+ remove_dirs:
+ - /assets/images/
+ - /assets/js/plugins/
+ - /assets/js/vendor/
+ remove_files:
+ - /assets/js/meta.js
+ - /assets/js/_main.js
+ - /assets/js/theme.js
+ - /assets/js/settings.js
+ - /assets/js/main.min.js.map
diff --git a/_layouts/document.html b/_layouts/document.html
index e545dc4..5977bbd 100644
--- a/_layouts/document.html
+++ b/_layouts/document.html
@@ -5,10 +5,11 @@ layout: single
{{ content }}
{% if page.author or page.contributors or jekyll.environment == 'production' and page.hits %}
-
{% endif %}
diff --git a/_layouts/settings.html b/_layouts/settings.html
index 7182227..778174a 100644
--- a/_layouts/settings.html
+++ b/_layouts/settings.html
@@ -46,10 +46,12 @@ layout: single
{% endfor %}
diff --git a/_plugins/post_process.rb b/_plugins/post_process.rb
new file mode 100644
index 0000000..396a83c
--- /dev/null
+++ b/_plugins/post_process.rb
@@ -0,0 +1,51 @@
+require "terser"
+
+ExecJS.runtime = ExecJS::Runtimes::MiniRacer if ExecJS::Runtimes::MiniRacer.available?
+
+Jekyll::Hooks.register :site, :post_write do |site|
+ config = site.config["post_process"]
+ next unless config
+
+ terser = config["terser"]
+ if terser.is_a?(Hash)
+ terser.each do |terser_output, terser_inputs|
+ next unless terser_output.is_a?(String) && terser_inputs.is_a?(Array)
+
+ terser_codes = []
+ terser_inputs_all_exist = true
+ terser_inputs.each do |file|
+ destination = File.join(site.dest, file)
+ if File.exist?(destination)
+ terser_codes << File.read(destination, encoding: "UTF-8")
+ else
+ terser_inputs_all_exist = false
+ break
+ end
+ end
+
+ if terser_inputs_all_exist
+ destination = File.join(site.dest, terser_output.to_s)
+ File.write(destination, Terser.compile(terser_codes.join(";")))
+ Jekyll.logger.info "Post Process:", "terser #{terser_output}"
+ end
+ end
+ end
+
+ remove_files = config["remove_files"]
+ if remove_files.is_a?(Array)
+ remove_files.each do |file|
+ destination = File.join(site.dest, file)
+ File.delete(destination) if File.exist?(destination)
+ Jekyll.logger.info "Post Process:", "remove_files #{file}"
+ end
+ end
+
+ remove_dirs = config["remove_dirs"]
+ if remove_dirs.is_a?(Array)
+ remove_dirs.each do |dir|
+ destination = File.join(site.dest, dir)
+ FileUtils.rm_rf(destination) if File.directory?(destination)
+ Jekyll.logger.info "Post Process:", "remove_dirs #{dir}"
+ end
+ end
+end