diff --git a/Gemfile b/Gemfile index 0baae100..76a63526 100644 --- a/Gemfile +++ b/Gemfile @@ -34,3 +34,5 @@ gem "http_parser.rb", "0.8.0", :platforms => [:jruby] # plugin dependencies gem "nokogiri", "1.18.10" gem "addressable", "2.8.7" +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 d0fa6f76..5872c384 100644 --- a/_config.yml +++ b/_config.yml @@ -318,12 +318,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: @@ -332,3 +326,27 @@ feed: - modpack - eula - multiplayer + +post_process: + terser: + /assets/js/main.min.js: + - /assets/js/settings.js + - /assets/js/theme.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/_main.js + - /assets/js/theme.js + - /assets/js/settings.js + - /assets/js/main.min.js.map diff --git a/_plugins/post_process.rb b/_plugins/post_process.rb new file mode 100644 index 00000000..396a83c7 --- /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